我有很多目录,其中有数百个文件。
每个目录中都有一对 my_file-01.jpg 和 my_file-€01.jpg
我想删除标题中包含 € 符号的每个文件:如何做到这一点?
答案1
find
做的工作:
find . -iname "*€*" -delete
删除所有名称匹配的文件“欧元“,小心,find 也会进入子目录,如果你不想这样,你必须稍微调整一下 find 参数
答案2
类似的东西
find -name '*€*' -delete
您可能想先尝试一下,看看是否会删除正确的文件:
find -name '*€*' -ls
答案3
在每个示例中,第一个命令列出名称包含 a 的文件€
,第二个命令删除它们。
使用 GNU find(在 Linux 上找到):
find -name '*€*' -ls
find -name '*€*' -delete
如果您只想匹配常规文件而不是目录,请-type f
在后面添加。-name '*€*'
使用 find,仅依赖 POSIX 功能:
find . -name '*€*' -print
find . -name '*€*' -exec rm {} +
如果您只想匹配常规文件而不是目录,请-type f
在后面添加。-name '*€*'
使用 bash 4 或 zsh:
echo **/*€*
rm **/*€*
仅在 zsh 下,**/*€*(.)
将匹配限制为常规文件,不包括目录。
如果您只想列出€
名称中包含 的文件,并且不存在相同的文件€
,这里有标准的 find 和 zsh 解决方案。
find . -name '*€*' -type f -exec sh -c 'cmp -s -- "$0" "$(printf "%s" "$0" | tr -d "€")"' {} \; -print
find . -name '*€*' -type f -exec bash -c 'cmp -s -- "$0" "${0//€/}")"' {} \; -print
echo **/*€*(.e\''cmp -s -- $REPLY ${REPLY//€/}'\')