Linux Bash 腳本 - 將連續檔案排序到連續資料夾

Linux Bash 腳本 - 將連續檔案排序到連續資料夾

我有一系列 1000 個文件,名稱如下:

file01-01-01, file01-01-02 etc.
file01-02-01, file01-02-02 etc.
file02-01-01, file02-02-02 etc.

我想將文件分類到名為如下的資料夾中:

dir01-01 (containing files01-01*)
dir01-02 (containing files01-01*)
dir02-01 (containing files02-01*)

我知道我可以透過以下行來減少執行此操作所需的時間:

mkdir dir01-01; for f in file01-01*; mv "$f" dir01-01; done

但上述只會稍微減少排序時間,如何自動化整個排序操作呢?

我知道我需要用 let N ++ 做一些事情,但我不知道如何合併它。

答案1

這應該有效。首先,我創建了這樣的測試文件:

touch file01-01-01 file01-01-02 file01-02-01 file01-02-02 file02-01-01 file02-02-02

透過使用確認它們存在ls -1,輸出如下所示:

file01-01-01
file01-01-02
file01-02-01
file01-02-02
file02-01-01
file02-02-02

然後我在包含這些檔案的目錄中執行這個 Bash 腳本:

find . -type f |\
  while read FULL_FILE_PATH
  do
    FIRST_TWO_DIGITS=$(echo "${FULL_FILE_PATH}" | grep -Eo '[[:digit:]]{2}-[[:digit:]]{2}');
    if [ ! -z "$FIRST_TWO_DIGITS" -a "$FIRST_TWO_DIGITS" != " " ]; then
      DIR=dir"${FIRST_TWO_DIGITS}";
      mkdir -p "${DIR}";
      mv "${FULL_FILE_PATH}" "${DIR}";
    fi
  done

完成後,我ls -1像這樣檢查了目錄,這是返回的輸出:

dir01-01
dir01-02
dir02-01
dir02-02

所以目錄就在那裡,但為了確認文件已被複製,我使用以下命令運行了該ls命令: 。這是輸出:*ls -1 *

dir01-01:
file01-01-01
file01-01-02

dir01-02:
file01-02-01
file01-02-02

dir02-01:
file02-01-01

dir02-02:
file02-02-02

相關內容