我正在编写一个bash脚本来查找图像文件并将它们复制到一个目录中。我的问题是,当我使用"find"命令时,它会找到所有的文件,但是当我添加...(未完待续)
当我添加cp命令时:
-exec cp -n {} $2 \;
我知道我已经设置了“不覆盖”,但我的测试用例已经考虑到了这一点,我还在脚本后面放置了一个经过验证的重命名机制。
当我在终端中输入时,我遇到了相同的问题。
find Desktop -iname '*.JPG' -o -iname '*.jpeg' -o -iname '*.jf[il1]f' -o -iname '*.exif' -o -iname '*.tiff' -o -iname '*.gif' -o -iname '*.bmp' -o -iname '*.png'
我得到了(我的测试用例是分布在不同目录中的300个图像,其中包含重复的文件和同名文件,但为了简化这个问题,这些文件都位于我的桌面上)。
Desktop/IMG_0316.PNG
Desktop/IMG_0191.JPG
Desktop/IMG_0292.JPG
Desktop/IMG_0269.PNG
Desktop/IMG_0318.PNG
Desktop/IMG_0172.JPG
当我添加cp命令时:
find Desktop/ -iname '*.JPG' -o -iname '*.jpeg' -o -iname '*.jf[il1]f' -o -iname '*.exif' -o -iname '*.tiff' -o -iname '*.gif' -o -iname '*.bmp' -o -iname '*.png' -exec cp -n {} test \;
我在测试中只获得以下文件:
Desktop/IMG_0316.PNG
Desktop/IMG_0269.PNG
Desktop/IMG_0318.PNG
我尝试从cp命令中删除“-n”选项,但没有任何区别。感谢任何帮助。
如果我添加echo,则会得到以下输出:
cp -n Desktop/IMG_0316.PNG test
cp -n Desktop/IMG_0269.PNG test
cp -n Desktop/IMG_0318.PNG test
find … -exec grep -qF foo {} \; -exec sed -i 's/foo/bar/' {} \;
仅在已包含“foo”的文件中将 foo 替换为 bar。(如果只执行 sed 部分,则会不必要地修改许多文件的 mtime。) - kojiro