Bash 查找过滤器和复制 - 空格问题

标签 bash find

因此,经过大量搜索并尝试解释别人的问题和满足我需求的答案后,我决定自己去问。

我试图采用一个充满图像的目录结构,并将所有图像(无论扩展名)放在一个文件夹中。除此之外,我希望能够在此过程中删除与某些文件名匹配的图像。我有一个 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/

相关文章:

bash - 将最新目录获取到 Bash 中的变量

bash - 比较目录中不包括多个硬链接(hard link)的所有文件的 md5

jQuery addClass 到所有具有 Class 的元素

linux - 如何使用 find 和 xargs 将文件从文件夹中的文件夹移动到另一个文件夹?

jquery - 如果选中元素,则添加类,但加载时不单击

Jquery 查找 'pre' 应用 css

linux - Bash 目录扁平化和重命名

arrays - 如何按空行将文本文件拆分为数组?

Python 子进程语法无效

bash - 如何使用 docker 容器运行 nginx?