Bash
根據部分目錄名稱重命名多個目錄中的文件
我在一個位置有許多目錄,其中包含各種副檔名的文件。目錄遵循標準約定,但其中的文件沒有。我試圖找到的解決方案是根據它們所在目錄的一部分重命名每個文件夾中的文件,以獲取我必須經過的文件夾列表。
例如:
目錄:001234@Redsox#17
file1.pdf file7A.doc spreadsheet.xls
輸出:
001234@file1.pdf 001234@file7A.doc 001234@spreadsheet.xls
遍歷每個目錄,僅重命名目錄名稱中的附加程式碼。我已經有一個基本框架來操作整個過程,但我不確定如何最好地獲取我需要的目錄部分
for directory in *; do pushd "$directory" index=1 for filename in *; do target_filename="${directory}$????${filename}" mv "$filename" "${target_filename}" ((index++)) done popd done
我會做這樣的事情:
# nullglob # If set, Bash allows filename patterns which match no files to # expand to a null string, rather than themselves. shopt -s nullglob # instead of looping through the dirs, loop through the files # add al the possible extensions in the list $ for f in */*.{doc,pdf,xls,txt}; do # get the file dirname d=$(dirname "$f") # using parameter expansion get the part # of the dirname you need echo mv -- "$f" "$d/${d%%@*}@$(basename "$f")" # when you are satisfied with the result, remove the `echo` done
$ ls -1 001234@Redsox#17/ 001234@file1.pdf 001234@file7A.doc 001234@spreadsheet.xls