我编写了一个 Python 脚本来解析大量数据并保存结果,最终生成了约 162 个文件。脚本将这些文件命名为Parsed_NameOfOriginal\n
。请注意\n
末尾的 ,这不是我的本意,但不知何故被我的脚本添加的。由于生成这些结果花费了很多时间,我不想再次运行修复后的脚本。
有没有办法使用 Linux 终端或 shell 脚本来重命名目录中具有相同名称的每个文件,但\n
在最后进行修剪?
即Parsed_ResultA\n
变成Parsed_ResultA
。
注意:这是换行符这是添加的,而不是文本\n
答案1
这应该有效:
for f in *$'\n'; do mv -i "$f" "${f%$'\n'}"; done
*$'\n'
扩展到所有以换行符结尾的文件名。循环
for
遍历所有匹配的文件,并将文件的名称保存在变量中F。${f%$'\n'}
从存储在的文件名中删除尾随的换行符F。mv -i
重命名文件,提示是否会覆盖任何内容。
答案2
您可以使用 debian 包中的 perl 重命名器libfile-rename-perl
:
rename 's/\n//' Parsed_Result*
由于存在多种版本rename
,请事先备份您的文件。
答案3
好的,好的,我的新变体:
$ touch boo$'\n'
$ touch foo$'\n'
$ ls -l
total 4
-rw-r--r-- 1 user user 54 Feb 9 12:16 111.sh
-rw-r--r-- 1 user user 0 Feb 9 12:17 boo?
-rw-r--r-- 1 user user 0 Feb 9 12:17 foo?
$ sh 111.sh
$ ls -l
total 4
-rw-r--r-- 1 user user 54 Feb 9 12:16 111.sh
-rw-r--r-- 1 user user 0 Feb 9 12:17 boo
-rw-r--r-- 1 user user 0 Feb 9 12:17 foo
$ cat 111.sh
for i in `find ./ -name '*
'`
do
mv $i$'\n' $i
done
$
旧版本(错误):
使用 :
find ./ -name "*\n" | sed 's/\(.*\)\\n/mv \1\\\\n\ \1/'
创建重命名命令列表。然后只需将所有这些命令复制/粘贴到终端即可。示例:
$ touch 111\\n
$ touch 222\\n
$ ls -l
total 0
-rw-r--r-- 1 user user 0 Feb 9 11:15 111\n
-rw-r--r-- 1 user user 0 Feb 9 11:15 222\n
$ find ./ -name "*\n" | sed 's/\(.*\)\\n/mv \1\\\\n\ \1/'
mv ./111\\n ./111
mv ./222\\n ./222
$ mv ./111\\n ./111
$ mv ./222\\n ./222
$ ls -l
total 0
-rw-r--r-- 1 user user 0 Feb 9 11:15 111
-rw-r--r-- 1 user user 0 Feb 9 11:15 222
$