我正在寻找一种简单的方法来重命名 Synology NAS 上的许多文件。find 并且sed
可用,但不可用rename
。
我可以得到这些文件和文件夹的列表
find . \( -type d -name "@*" -prune \) -o \( -name "**" \) -print
上面的 find 语句显示所有包含“/”字符的文件,在 Synology bash 中替换为“”。
我需要替换的所有特殊字符是:
/ \ : ? ' ’ ´ ’
根据所使用的平台和文件共享协议,这些字符的外观会有所不同,显示不同或根本不显示,或者会导致不同类型的问题。我可以通过以下方式在 Synology bash 中找到这些字符:
-name "**" -o -name '*\\*' -o -name "*:*" -o -name "*\?*" -o -name "*\'*" -o -name "*´*" -o -name "*`*"
如何在它找到的每个文件和目录中替换这些字符?我将从字符“/”开始。
非常感谢您的帮助!
加里
假设该
find
命令与您要重命名的确切文件集匹配,并且您要重命名为“安全”文件名。在不知道文件名中的确切字符的情况下,我只能提供建议,但这里有两个。删除奇怪的字符。这假定角色可以通过
bash
替换来本地处理只保留已知字符。确保它
tr
具有您要保留的字符集。在这两种情况下都删除
echo
以将调试转换为活动语句。这是使用 for 循环的替代方法:
注意:在执行移动/删除命令之前最好先进行备份。
如果您的 find 命令给了您想要的结果,您可以将其通过管道传输到 sed,然后从 sed 传输到 bash(或重定向到文件,而不是通过管道传输到 bash/ash):
或者您可以将 sed 重定向到文件并 bash/ash 该文件(bash list_of_files_and_dirs_to_be_renamed)。在将其用于真实数据之前,请先在不重要的文件/目录上进行测试。