因此,经过大量搜索并尝试解释别人的问题和满足我需求的答案后,我决定自己去问。
我试图采用一个充满图像的目录结构,并将所有图像(无论扩展名)放在一个文件夹中。除此之外,我希望能够在此过程中删除与某些文件名匹配的图像。我有一个 find 命令可以为我输出所有文件路径
find -type f -exec file -i -- {} + | grep -i image | sed 's/\:.*//'
但是如果我尝试使用它来复制文件,我会遇到文件名中空格的问题。
cp `find -type f -exec file -i -- {} + | grep -i image | sed 's/\:.*//'` out/
我做错了什么,有更好的方法吗?
最佳答案
需要注意的是,如果文件名称中包含换行符,它将不起作用:
find . -type f -exec file -i -- {} + |
awk -vFS=: -vOFS=: '$NF ~ /image/{NF--;printf "%s\0", $0}' |
xargs -0 cp -t out/
(基于 Jonathan Leffler 的回答以及随后与他和 @devnull 的评论讨论。)
关于Bash 查找过滤器和复制 - 空格问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669990/