错误。使用 Windows 保留字符重命名文件和目录

错误。使用 Windows 保留字符重命名文件和目录

我的硬盘无法安装在 Linux Mint 上,要修复它,我必须转到 Windows 并执行chkdsk /f e:. chkdsk 解决了这个问题,但它用特殊字符重命名了每个文件,并将这些文件移动到一个found.000目录中。所以现在我必须像以前一样移动并重新命名这些文件。如果我不时运行命令来重命名带有特殊字符的文件,我可以避免再次发生这种情况。

我想递归地重命名文件和目录从当前目录。这换行符应该更换对于空间, 这人物 < > : " \ | ? *应该已删除或者更好地替换为未保留的类似字符,并且空格开始和结束文件名的应该是已删除。这是一个例子我想要的是

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Fîlenämè $@')

这是什么甚至更好

rename(' Fîlenämè\n\r\n$@<>:"\|?* \n ', 'Filename $@')

根据这个答案它应该是这样的:

LC_ALL=C find . -depth -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

我需要忽略该..Trash-1000目录,因为该命令给了我输入/输出错误并且该命令停止工作。如果该目录中存在可以重命名的文件,那么拥有一个处理这些错误的脚本将是完美的。

我被告知要修剪..Trash-1000目录,如下所示这个答案。我也看了一下这个。但这样做是行不通的:

LC_ALL=C find . -depth -path ./..Trash-1000 -prune -o -print -execdir rename -n 's/[\r\n]+/ /g; s/:/./g; s/[\|]/-/g; s/[<>"?*]//g; s/[ \f\t\v]+$//g; s/^[ \f\t\v]+//g' {} +

而且它仍然没有删除文件名开头和结尾的空格。

我不得不将我的问题重写为问题使用重命名递归替换文件名(而不是目录)中的无效字符的脚本没有回答我的。

答案1

该命令可以对每个其他目录执行一次,而不是修剪给出输入/输出错误的目录。

这是我用来删除 Windows 保留字符的命令:

find . -execdir rename -n 's/[\r\n]+/ /g;
                           s/:/./g;
                           s/[\|]/-/g;
                           s/[<>"?*]//g;
                           s/[ \f\t\v]+$//g;
                           s/^[ \f\t\v]+//g' {} \;

它将换行符转换为空格,然后替换:.然后用 更改\|-然后删除<>"?*,然后删除文件名末尾的空格,然后对开头的空格执行相同的操作。

相关内容