[英]Rename file in bash script
我發現已經有人問過如何在bash腳本中重命名多個文件。 我已經檢查了所有答案。 但是,我無法解決我的問題。 我想在給定目錄中找到具有特定名稱的所有文件。 然后,我想相應地重命名所有文件。 我需要所有以'lattice'開頭的部分,也需要以'POSCAR'開頭的文件。 在晶格目錄中。 我有很多以'lattice'開頭的目錄
這就是我嘗試過的。 Bash發出錯誤消息,例如“它們是相同的文件”
match=POSCAR.
replace=POSCAR
for D in *lattice*
do echo "$D"
for file in $(find $D -name "*POSCAR*")
do
echo "$file"
src=$file
tgt=$(echo $file | sed -e "s/*$match*/$replace/")
fnew= `echo $file | sed 's/*POSCAR/POSCAR/'`
mv $src $tgt
done
done
也許rename
工具可能會對您有所幫助。
rename 's/POSCAR\./POSCAR/' *lattice*
您可以嘗試這樣的事情
find lattice* -type f -name 'POSCAR.*' \
-exec bash -c 'echo mv -iv "$0" "${0/POSCAR./POSCAR}"' '{}' \;
確定可以滿足您的要求時,請刪除回聲 。 請注意,這是假設您沒有POSCAR.
目錄,位於路徑的前面。
同樣, *WORD*
可以在任何地方匹配帶有WORD
文件。 WORD*
匹配以WORD
開頭的文件。 另外,我假設您的意思是POSCAR.*
是常規文件(即不是目錄或符號鏈接,因此我包括了-type f
。
您所需要做的就是正確的find
語法和正確的bash字符串操作
while read -d $'\0' -r file; do
# // replaces all matches. If you want only the first one use /
newname=${file//POSCAR./POSCAR}
mv "$file" "$newname"
done < <(find \( -ipath '*/lattice*' -and -iname 'POSCAR.*' \) -print0)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.