删除文件名中的换行符

arv*_*vil 10 scripting rename files

我有一个 PHP 代码,它生成 wget 将在其上附加其日志的文件名。我生成了 2000 多个文件,但问题是我无法使用它们,因为我错误地将其PHP_EOL作为其名称的一部分,该代码将添加 LF/line feed/%0A到其名称中

此类文件名的示例(当通过浏览器访问时,当放在 /var/www/html 上时)http://xxxx/wget_01_a%0a.txt注意%0a扩展名之前的

我搞砸了,我希望有一个重命名批处理可以搜索所有文件,如果找到line feed它会在没有换行符的情况下重命名它,所以它只是http://xxxx/wget_01_a.txt

我不太确定如何处理这个问题,因为当我ls使用腻子时,所有不限于不需要的字符的特殊字符似乎都变成了?,我只想针对该换行符。

dha*_*hag 13

使用renameCentOS 6 提供的 util-linux 中的实用程序,并假设为 bash:

rename $'\n' '' wget_*
Run Code Online (Sandbox Code Playgroud)

这要求从列出的文件的名称中删除换行符。我建议在一个小的子集上试用它以确保它做你想要它做的事情(注意rename在 CentOS 7 上支持一个-v开关来显示它正在做的更改)。

相反,如果您使用的是提供基于 Perl 的发行版rename

rename -n 's/\n//g' wget_*
Run Code Online (Sandbox Code Playgroud)

然后运行而不-n实际执行重命名。


小智 5

在已经回答的基础上,我将其概括为通过将 find 命令与 rename 相结合来重命名当前文件夹和子文件夹中包含换行符的所有文件 -

find -name $'*\n*' -exec rename  $'s|\n| |g' '{}' \;
Run Code Online (Sandbox Code Playgroud)

在这里,find 命令查找所有包含换行符的文件,而 rename 命令用空格替换名称中的每个换行符。

对于任何其他此类有问题的字符(例如回车符 (\r))也可以执行相同的操作。