根據部分目錄名稱重新命名多個目錄中的文件

根據部分目錄名稱重新命名多個目錄中的文件

我在一個位置有許多目錄,其中包含各種擴展名的檔案。這些目錄遵循標準約定,但其中的文件則不然。我試圖找到的解決方案是根據每個資料夾中的文件所在目錄的一部分來重命名每個資料夾中的文件,以獲取我必須瀏覽的資料夾列表。

例如:

目錄:001234@Redsox#17

file1.pdf
file7A.doc
spreadsheet.xls

輸出:

[email protected]
[email protected]
[email protected]

對每個目錄進行後續操作,僅重命名目錄名稱中附加的程式碼。我已經有了一個用於整個過程操作的基本框架,但我不確定如何最好地獲取我需要的目錄部分

for directory in *; do 
    pushd "$directory"
    index=1
    for filename in *; do
        target_filename="${directory}$????${filename}"
        mv "$filename" "${target_filename}"
        ((index++))
   done
  popd
done

答案1

我會做這樣的事情:

# 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/
[email protected]
[email protected]
[email protected]

相關內容