rp1*_*101 44 linux bash rename
我有很多扩展名为.txt的文件.如何在linux中删除多个文件的.txt扩展名?
我找到
rename .old .new *.old
Run Code Online (Sandbox Code Playgroud)
替代.old延伸到.new
此外,我想对子文件夹中的文件执行此操作.
thk*_*ala 70
rename 有点危险,因为根据其手册页:
重命名将通过替换第一次出现的... 重命名指定的文件
它会很高兴用文件名来做错误的事情c.txt.parser.y.
这是一个使用find和的解决方案bash:
find -type f -name '*.txt' | while read f; do mv "$f" "${f%.txt}"; done
Run Code Online (Sandbox Code Playgroud)
请记住,如果文件名包含换行符,这将会中断(很少见,但并非不可能).
如果您有GNU查找,这是一个更可靠的解决方案:
find -type f -name '*.txt' -print0 | while read -d $'\0' f; do mv "$f" "${f%.txt}"; done
Run Code Online (Sandbox Code Playgroud)
小智 20
我用这个:
find ./ -name "*.old" -exec sh -c 'mv $0 `basename "$0" .old`.new' '{}' \;
Run Code Online (Sandbox Code Playgroud)
And*_*w S 13
Perl版本的重命名可以删除扩展名,如下所示:
rename 's/\.txt$//' *.txt
Run Code Online (Sandbox Code Playgroud)
这可以与find结合使用,以便也可以执行子文件夹.
rob*_*ert 11
您可以显式传入一个空字符串作为参数.
rename .old '' *.old
并与子文件夹,find . -type d -exec rename .old '' {}/*.old \;. {}是找到的条目的替代find,并\;终止后面给出的命令的arglist -exec.