bash - 如何使用linux find命令替换所有文件名中的特殊字符?

标签 bash replace find exec

我想用空格替换所有 pdf 文件名称中的所有特殊字符(即 _?:/)(\-\n\t)

我无法做到这一点,所以我只是尝试使用此命令删除它们。

由于某些原因,此命令有时适用于测试用例,但不适用于其他用例。它给出错误 mv: 目标不是目录,并且输入和目标文件的名称相同(如果没有要删除的特殊字符)。

find .  -name '*.pdf' -exec sh -c 'if="{}"; of=$(echo $if|tr -d '_:-'  ); mv $if $of ;' \;

我希望更改文件名:

    a:bc-de_(fg).pdf

成为

    a bc de  fg .pdf

最佳答案

“mv:目标不是目录”是因为文件名中存在空格,可以通过将文件名放在双引号内来修复。

试试这个

find .  -name '*.pdf' -exec sh -c 'if="{}"; of=$(echo $if|tr "()_:-" " " ); mv "$if" "$of" ;' \;

关于bash - 如何使用linux find命令替换所有文件名中的特殊字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55505974/

相关文章:

sql - 使用 SQL Server 替换函数替换字符串 - 字符串超过 4000 个字符 - 怎么办?

regex - 在 Xcode 4 中使用通配符查找和替换

linux - 删除列表中早于文件纪元日期的文件

php - pcregrep 用于查找 php 打开标记之前具有额外空间的所有文件

linux - 在路径之前使用 find 命令显示文件大小

bash - 从文件名中删除 "!"、 "["和 "]"

linux - 如何永久启用终端输出到文件?

linux - tar 目录,但不要在存档中存储完整的绝对路径

php - 如何在 PHP 中替换第一个 HTML <strong></strong> 标签

visual-studio-code - CLion 中 VSCode 的 CTRL+D ("add selection to next find match") 等效快捷方式是什么?