我想比较两个文件夹,看看里面的文件是否相同。如果它是相同的,那么我将这些文件移动到另一个文件夹。例如:
f1 f2
------ --------
test1 test3
test2 test4
test1
此处test1.txt
文件在两个文件夹中都可用,因此我需要将该文件移动到另一个文件夹中。
如何使用shell脚本完成此操作?
答案 0 :(得分:0)
迭代第一个目录中的文件。对于其中的每个文件,检查它是否存在于另一个目录中。如果它存在,则将两个文件移动到另一个目录。
答案 1 :(得分:0)
for F in f1/*
do
test -f $F && test -f f2/${F#*/} && echo cp $F f3/
done
在这种情况下了解参数扩展是一个好主意。上面,构造${F#*/}
相当于$(basename $F)
,但更快,因为它不会为每次迭代执行 basename (1)。
如果你有很多文件,而且你真的不需要测试文件是否是常规文件,你可以通过生成脚本来避免循环,从而加快速度。类似的东西:
mkfifo .f1 .f2
(cd f1 && ls > ../.f1)& (cd f2 && ls > ../.f2)&
comm -12 .f1 .f2 | sed 's:^.*$:cp f1/& f3/:' | sh
rm .f1 .f2
我为了说明而假设文件名不包含空格或其他奇怪的字符。如果他们这样做,当然参数将需要引用。