如何删除标题中包含 x 的每个文件?

如何删除标题中包含 x 的每个文件?

我有很多目录,其中有数百个文件。

每个目录中都有一对 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//€/}'\')

相关内容