Linux

根據文件中的特定規則移動子文件夾中的文件

  • February 15, 2022

我有 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=,上述內容(仍然記住您的文件名或目錄名不應包含逗號字元)。

引用自:https://unix.stackexchange.com/questions/690703