用下划线替换空格并小写 - 文件名

Cod*_*ent 5 linux bash ubuntu

我正在重命名文件和目录。基本上,我想做的就是去掉空格并用下划线替换它们,最后变成小写。我可以一次执行一个命令:$ rename "s/ /_/g" *,然后是小写命令。但我正试图在一行中完成这一切。下面我能完成的就是去掉空格并替换为,_但它不会\xe2\x80\x99t 变成小写。怎么会?

\n\n
find /temp/ -depth -name "* *" -execdir rename \'s/ /_/g; s,,?; \xe2\x80\x98\n
Run Code Online (Sandbox Code Playgroud)\n\n

原始文件名:

\n\n
test FILE   .txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

结果:(如果末尾有空格,则去掉)

\n\n
test_file.txt\n
Run Code Online (Sandbox Code Playgroud)\n

Joh*_*024 5

rename 's/ +\././; y/A-Z /a-z_/'
Run Code Online (Sandbox Code Playgroud)

或者,结合find

find /temp/ -depth -name "* *" -exec rename 's/ +\././; y/A-Z /a-z_/' {} +
Run Code Online (Sandbox Code Playgroud)

要仅定位文件而不是目录,请添加-type f

find /temp/ -depth -name "* *" -type f -exec rename 's/ +\././; y/A-Z /a-z_/' {} +
Run Code Online (Sandbox Code Playgroud)

缩短名称

是否可以使用原始文件的最后三个字符重命名该文件,例如从big Dog.txt 重命名为dog.txt?

是的。使用这个rename命令:

rename 's/ +\././; y/A-Z /a-z_/; s/[^.]*([^.]{3})/$1/'
Run Code Online (Sandbox Code Playgroud)