我正在重命名文件和目录。基本上,我想做的就是去掉空格并用下划线替换它们,最后变成小写。我可以一次执行一个命令:$ rename "s/ /_/g" *,然后是小写命令。但我正试图在一行中完成这一切。下面我能完成的就是去掉空格并替换为,_但它不会\xe2\x80\x99t 变成小写。怎么会?
find /temp/ -depth -name "* *" -execdir rename \'s/ /_/g; s,,?; \xe2\x80\x98\nRun Code Online (Sandbox Code Playgroud)\n\n原始文件名:
\n\ntest FILE .txt\nRun Code Online (Sandbox Code Playgroud)\n\n结果:(如果末尾有空格,则去掉)
\n\ntest_file.txt\nRun Code Online (Sandbox Code Playgroud)\n
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)