Linux
根據 csv 列表將具有匹配前綴的所有文件移動到文件夾
我有數千個帶有各種前綴的文件,這些前綴被分組在一個 csv 列表中。現在我想根據他們的列表將它們全部移動到他們的文件夾中。
例如:文件 A1B1C1_{…}.png、A1B2C2_{…}.png、A1B1C3_{…}.png 等 CSV 列表:
Name Group A1B1C1 John A2B1C1 John A1B2C2 Denver A1B1C3 Nick
現在我想將所有帶有 A1B1C1_ 和 A2B1C1_ 前綴的文件移動到 John 文件夾,將 A1B2C2_ 前綴移動到 Denver 文件夾,將 A1B1C3_ 前綴移動到 Nick 文件夾。
我在考慮
for group in *_*.csv; do {...}
但我不確定如何從 csv 文件中讀取列表以及從列表語法中移動文件。
我正在開發 CentOS,非常感謝。
awk 'NR > 1 { print $1, $2 }' list.csv | while read -r prefix group; do find . -type f -name "$prefix*" -exec sh -c ' group="$1"; shift mkdir -p "$group" for name do echo mv "$name" "$group"; done' sh "$group" {} + done
這將用於
awk
提供帶有前綴和組名的 while 循環(跳過列表文件的文件頭)。這假定所有前綴和組名中都沒有空格或製表符。while 循環呼叫
find
以查找目前目錄中或目前目錄下的所有正常文件,其名稱以給定前綴開頭。對於所有此類文件,呼叫以下簡短的 shell 腳本:group="$1" shift mkdir -p "$group" for name do echo mv "$name" "$group" done
該腳本期望組名是命令行上的第一個參數,其餘參數是要移動到該組目錄的文件的路徑名。
如果目前工作目錄不存在,該腳本會在目前工作目錄中創建一個組目錄,然後遍歷給定的路徑名,將每個文件移動到位。不檢查文件是否被覆蓋。
echo
防止mv
實際執行。執行程式碼以echo
確保其正常工作,然後刪除echo
.