删除文件名中的换行符


9

我有一个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在腻子上所有不限于该多余字符的特殊字符都变成时?,我只希望针对的是换行符。

Answers:


12

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

rename $'\n' '' wget_*

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

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

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

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


兄弟,什么都没发生pastebin.com/NjMg8vTL我正在使用centos 6
arvil

也许您实际上没有换行字符\n?您可以执行类似echo的操作,*.txt | od -c以便我们看到实际的不可打印字符吗?
dhag 2015年

看起来像\n pastebin.com/wXCDCJjr
Arvil

我不确定出什么问题,除非出于某些原因,先前粘贴中的文件不匹配*.txt(这说明了为什么rename不选择它)。如果将这两种模式设置为txt而不是$'\n''',则得到任何输出吗?echo $'\ n'确实会打印两个换行符吗?
dhag 2015年

1
我必须使用rename $'\r' '' wget_*它才能正常工作
rshdev '16

2

在已经回答的内容的基础上,我将其归纳为通过将find命令与重命名结合使用来重命名当前文件夹和子文件夹中所有包含换行的文件-

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

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

对于任何其他此类有问题的字符(例如回车符(\ r))也可以这样做。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.