Image Bash find-exec cp并非所有文件都被复制
我正在编写一个bash脚本来查找图像文件并将它们复制到dir。我的问题是,当我使用“查找”时,它会查找所有文件,但当我添加Image Bash find-exec cp并非所有文件都被复制,image,bash,copy,find,Image,Bash,Copy,Find,我正在编写一个bash脚本来查找图像文件并将它们复制到dir。我的问题是,当我使用“查找”时,它会查找所有文件,但当我添加 -exec cp -n {} $2 \; 我知道我已经设置了DoNotClobber,但是我的测试用例考虑到了这一点,我也有一个重命名机制,稍后在脚本中进行了尝试和测试 当我直接进入终点站时,我也遇到了同样的问题 find Desktop -iname '*.JPG' -o -iname '*.jpeg' -o -iname '*.jf[il1]f' -o -iname
-exec cp -n {} $2 \;
我知道我已经设置了DoNotClobber,但是我的测试用例考虑到了这一点,我也有一个重命名机制,稍后在脚本中进行了尝试和测试
当我直接进入终点站时,我也遇到了同样的问题
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个不同目录下的图像,具有重复项和相同名称的文件,但为了解决这个问题,将其简化为桌面上的这些文件)
当我添加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,但没有任何效果
谢谢,谢谢你的帮助
如果我加上回声,我就得到了
cp -n Desktop/IMG_0316.PNG test
cp -n Desktop/IMG_0269.PNG test
cp -n Desktop/IMG_0318.PNG test
使用帕伦斯
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 \;
实际上,-exec
是一个动作,而-iname
是一个谓语(在语法方面的测试)。它们根本不能互换。默认操作是-print
。你的意思是:
find Desktop -iname '*.JPG' -print \
-o -iname '*.jpeg' -print -o ... -o -iname -iname '*.png' -exec cp...
通过使用parens,您的组测试和为整个组提供单个操作。一切都是谓词。例如,您可以执行
find…-exec grep-qF foo{}-exec sed-i's/foo/bar/'{}\
仅在已包含“foo”的文件中用bar替换foo。(如果你只是做sed部分,你会不必要地修改许多文件的mtime。)我认为actions结果代码可以用作测试,但我认为主题初学者不希望使用find this方法。然而,你是对的,这是一个有益的评论。
find Desktop -iname '*.JPG' -print \
-o -iname '*.jpeg' -print -o ... -o -iname -iname '*.png' -exec cp...