删除文件名中的换行符

删除文件名中的换行符

我有一个 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在腻子上时,所有特殊字符(不限于不需要的字符)都变成了?,我只想瞄准的是换行符。

答案1

使用 CentOS 6 提供的 util-linux 实用程序rename,并假设 bash:

rename $'\n' '' wget_*

这要求从列出的文件名称中删除换行符。我建议在一个小子集上尝试一下,以确保它能够实现您想要的功能(请注意,renameCentOS 7 上支持一个-v开关来显示它正在进行哪些更改)。

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

rename -n 's/\n//g' wget_*

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

答案2

基于已经回答的内容,我将其概括为重命名当前文件夹和子文件夹中包含换行符的所有文件,方法是将 find 命令与 rename 结合起来 -

find -name $'*\n*' -exec rename  $'s|\n| |g' '{}' \;

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

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

相关内容