Linux
根據文件中的特定規則移動子文件夾中的文件
我有 1 個大文件夾,裡面有很多 .txt 文件
我正在嘗試根據文件中的特定規則
rules.csv
(在它們所屬的子文件夾上)將這些 .txt 文件分組到單獨的子文件夾中:大文件夾:
file1.txt
file2.txt
…
file100.txt
規則是:
文件1.txt 文件3.txt文件
8.txt
屬於“子文件夾1”
文件 2.txt 文件4.txt
文件23.txt
屬於“子文件夾2”
ETC
以下是 CSV (rules.csv) 中的規則列表:
第一列是文件名,第二列是我想將它們移動到的子文件夾。
file1.txt subfolder1 file3.txt subfolder1 file8.txt subfolder1 file2.txt subfolder2 file4.txt subfolder2 file23.txt subfolder2 file5.txt subfolder3 file6.txt subfolder3 file9.txt subfolder3 file11.txt subfolder3 file16.txt subfolder3 file12.txt subfolder4 file13.txt subfolder4 file14.txt subfolder4 file19.txt subfolder4 file24.txt subfolder4 file28.txt subfolder4 file30.txt subfolder4 file78.txt subfolder5 file37.txt subfolder5 file49.txt subfolder5 file88.txt subfolder5
這就是我想要達到的目標。
有沒有辦法根據“mv”之類的終端命令將這些.txt文件移動到它們各自的子文件夾中+從上面提到的CSV文件中讀取這些規則?(甚至不確定是否可能)
我嘗試過這樣的事情
mv file1.txt,file3.txt,file8.txt* /subfolder1
但是在沒有規則的情況下手動為每個手動執行似乎適得其反:(
假設您的文件名稱中沒有空格,如您的問題所示,那麼您可以使用簡單的 shell 循環將文件移動到第二列中相應的目錄中。
while IFS=' ' read -r fileName dirName; do mkdir -p "./$dirName" && mv "./$fileName" "./$dirName"; done <rules.txt
如果您*
rules.csv
*確實是 .csv 文件(逗號分隔文件),那麼您可以更改IFS=,
上述內容(仍然記住您的文件名或目錄名不應包含逗號字元)。