用于修复目录中文件名的sed命令

sky*_*gle 6 bash ubuntu sed

我运行一个脚本,在目录中生成大约10k个文件.我刚刚发现脚本中有一个错误导致某些文件名有回车符(大概是'\n'字符).

我想运行一个sed命令从文件名中删除回车.

任何人都知道哪些参数传递给sed以所描述的方式清理文件名?

我正在运行Linux(Ubuntu)

Ble*_*der 7

我不知道怎么sed会这样做,但这个python脚本应该做的伎俩:

这不是sed,但我发现python在做这些事情时更容易使用:

#!/usr/bin/env python

import os

files = os.listdir('.')

for file in files:
  os.rename(file, file.replace('\r', '').replace('\n', ''))
  print 'Processed ' + file.replace('\r', '').replace('\n', '')
Run Code Online (Sandbox Code Playgroud)

它头尾都的任何事件\r,并\n从所有的文件名在一个特定的目录中.

要运行它,将其保存cd到目标目录(包含要处理的文件),然后运行python /path/to/the/file.py.

此外,如果您计划进行更多批量重命名,请考虑使用Métamorphose.对于这些东西来说,这是一个非常好用且功能强大的GUI.而且,它是免费的!

祝好运!


实际上,试试这个:cd进入目录,输入python,然后将其粘贴到:

exec("import os\nfor file in os.listdir('.'):\n  os.rename(file, file.replace('\\r', '').replace('\\n', ''))\n  print 'Processed ' + file.replace('\\r', '').replace('\\n', '')")
Run Code Online (Sandbox Code Playgroud)

它是上一个脚本的单行版本,您无需保存它.


版本2,具有空间替换功能:

#!/usr/bin/env python

import os

for file in os.listdir('.'):
  os.rename(file, file.replace('\r', '').replace('\n', '').replace(' ', '_')
  print 'Processed ' + file.replace('\r', '').replace('\n', '')
Run Code Online (Sandbox Code Playgroud)

这是单线:

exec("import os\nfor file in os.listdir('.'):\n  os.rename(file, file.replace('\\r', '').replace('\\n', '')replace(' ', '_'))\n  print 'Processed ' + file.replace('\\r', '').replace('\\n', '');")
Run Code Online (Sandbox Code Playgroud)