簡體   English   中英

重命名bash腳本中的文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM