Linux 带 for 的多行命令

Linux multiline command with for

我想测试和比较两个文件夹中的文件。为此,我使用了下一个命令

for FILE in folder_one/*; do
    test -f folder_one_arch/$FILE && echo $FILE " exists" || echo $FILE " not exists"
    cmp -s $FILE folder_one_arch/$FILE && echo "same" || echo "different";
done

但是这个命令不起作用,问题出在哪里?

问题来自 $FILE:它包含一个路径,而您需要一个文件。

我建议你采用以下方法:有两个变量,PATHfor 循环中的变量,FILE 只是文件基名。

for PATH in folder_one/*; do
    echo "PATH is $PATH "
    FILE=${PATH##*/}
    echo "FILE is now $FILE"
    test -f folder_one_arch/$FILE && echo $FILE " exists" || echo $FILE " not exists"
    cmp -s $PATH folder_one_arch/$FILE && echo "same" || echo "different";
done

https://mywiki.wooledge.org/BashFAQ/073