gpt4 book ai didi

linux - 使用 Bash 检查另一个目录中是否存在相同的文件

转载 作者:太空狗 更新时间:2023-10-29 11:48:39 24 4
gpt4 key购买 nike

我是 bash 的新手,希望得到您的帮助;找不到这个案例的答案。我正在尝试检查一个目录中的文件是否存在于另一个目录中

假设我有路径/home/public/folder/(这里我有几个文件)我想检查文件是否存在于/home/private/folder2

我试过了

for file in $firstPath/*
do
if [ -f $file ]; then
(ask if to over write etc.. rest of the code)

还有

for file in $firstPath/*
do
if [ -f $file/$secondPath ]; then
(ask if to over write etc.. rest of the code)

两者都不起作用;似乎在第一种情况下,它比较了第一个路径中的文件(所以它总是问我是否要覆盖,尽管它在第二个路径中不存在)在第二种情况下,它不在 if 语句中。我该如何解决?

最佳答案

当你有一个类似 for file in $firstPath/* 的结构时, $file 的值将包括 $firstPath 的值, $secondPath 中不存在.您需要剥离路径以获得裸文件名。

在传统的 POSIX shell 中,执行此操作的规范方法是使用名为 basename 的外部工具。 .但是,您可以使用 Parameter Expansion 实现通常认为等效的功能。 ,因此:

for file in "$firstPath"/*; do
if [[ -f "$secondPath/${file##*/}" ]]; then
# file exists, do something
fi
done

${file##*/}位是这里的重要部分。根据上面链接的文档,这意味着“$file 变量,删除了最后一个 / 之前的所有内容。”结果应该与 basename 相同产生。

作为一般规则,您应该 quote your variables in bash .此外,考虑使用 [[而不是 [除非您实际上正在编写需要可移植的 POSIX shell 脚本。您将拥有更广泛的可用测试集,以及更可预测的变量处理。有other differences too .

关于linux - 使用 Bash 检查另一个目录中是否存在相同的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53577193/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com