我的硬盘无法安装在 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' {} \;
它将换行符转换为空格,然后替换:
,.
然后用 更改\|
,-
然后删除<>"?*
,然后删除文件名末尾的空格,然后对开头的空格执行相同的操作。