[英]Recursively change file extensions in Bash
我想遞歸遍歷一個目錄並更改某個擴展名的所有文件的擴展名,比如.t1
到.t2
。 執行此操作的 bash 命令是什么?
用:
find . -name "*.t1" -exec bash -c 'mv "$1" "${1%.t1}".t2' - '{}' +
如果您有可用的rename
請使用以下之一:
find . -name '*.t1' -exec rename .t1 .t2 {} +
find . -name "*.t1" -exec rename 's/\.t1$/.t2/' '{}' +
如果您的bash
版本支持globstar
選項(版本 4 或更高版本):
shopt -s globstar
for f in **/*.t1; do
mv "$f" "${f%.t1}.t2"
done
我會在 bash 中這樣做:
for i in $(ls *.t1);
do
mv "$i" "${i%.t1}.t2"
done
編輯:我的錯誤:它不是遞歸的,這是我遞歸更改文件名的方法:
for i in $(find `pwd` -name "*.t1");
do
mv "$i" "${i%.t1}.t2"
done
或者您可以簡單地安裝mmv
命令並執行以下操作:
mmv '*.t1' '#1.t2'
這里#1
是第一水珠部分即*
的*.t1
。
或者在純 bash 的東西中,一個簡單的方法是:
for f in *.t1; do
mv "$f" "${f%.t1}.t2"
done
(即: for
可以在沒有外部命令(如ls
或find
)幫助的情況下列出文件)
HTH
在全新安裝的 debian 14 上,上述解決方案均不適合我。這應該適用於任何 Posix/MacOS
find ./ -depth -name "*.t1" -exec sh -c 'mv "$1" "${1%.t1}.t2"' _ {} \;
所有學分: https : //askubuntu.com/questions/35922/how-do-i-change-extension-of-multiple-files-recursively-from-the-command-line
我對這些解決方案之一的懶惰復制粘貼不起作用,但我已經安裝了fd-find
,所以我使用了它:
fd --extension t1 --exec mv {} {.}.t2
從fd
的聯機幫助頁,執行命令時(使用--exec
):
The following placeholders are substituted by a
path derived from the current search result:
{} path
{/} basename
{//} parent directory
{.} path without file extension
{/.} basename without file extension
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.