2017-09-25 142 views
-1

我有多個文件夾的多個文件夾。我需要使用相同的名稱重命名這些文件,例如文件以「_partN」前綴存儲的文件夾。在單個linux命令的os腳本中,用一些條件重命名多個文件夾中的所有文件。

作爲例子,

我有一個命名爲 「new_folder_for_upload」 的有2個文件夾。我需要將名稱轉換這2個文件的一樣,

new_folder_for_upload_part1 new_folder_for_upload_part2

我有這麼多的文件夾等,其上面有多個文件。我需要按照上面所述轉換所有文件名。

任何人都可以幫助我找出一個單一的Linux命令或腳本來自動完成這項工作嗎?

+0

什麼是文件的原始名字? 'part1'和'part2',有沒有機會,還是你要枚舉它們? – DevSolar

+0

你是否需要子文件夾中的重命名文件,或所有頂層目錄? – DevSolar

+0

樣品一樣的文件: FineHowardMD_1490040273_tab17.pdf HowardFineMD_1463582881_tab17.pdf 我需要的父目錄名和「_partN」更改文件名 例子: new_folder_for_upload_part1.pdf new_folder_for_upload_part2.pdf 最後完成後,這工作,我需要將所有目錄中的所有文件存儲到頂層目錄中。 –

回答

1

假設bash shell,並假定您想要爲每個子目錄重新啓動文件編號,並將所有文件移動到頂層目錄(留下空子目錄)。格式化爲腳本以方便您閱讀:

find . -type f -print0 | while IFS= read -r -d '' file 
do 
    myfile=$(echo $file | sed "[email protected]/@@") 
    mydir=$(dirname "$myfile") 
    if [[ $mydir != $lastdir ]] 
    then 
     NR=1 
    fi 
    lastdir=${mydir} 
    mv "$myfile" "$(dirname "$myfile")_part${NR}" 
    ((NR++)) 
done 

或者作爲一個行命令:

find . -type f -print0 | while IFS= read -r -d '' file; do myfile=$(echo $file | sed "[email protected]/@@"); mydir=$(dirname "$myfile"); if [[ $mydir != $lastdir ]]; then NR=1; fi; lastdir=${mydir}; mv "$myfile" "$(dirname "$myfile")_part${NR}"; ((NR++)); done 

當心。這是武裝,並將執行批量重命名/移動您當前工作目錄中或以下的每個文件。使用風險自負。

要刪除空子目錄:

find . -depth -empty -type d -delete 
+0

謝謝DevSolar, 您提供的腳本爲我工作。 謝謝你的幫助。 –