如何將文件一個一個複製到不同的文件夾?
在一個目錄中,我有名稱為:
01.txt 02.txt 03.txt
在同一目錄中是具有以下名稱的文件夾:
01.abc 02.def 03.ghi
我需要一個命令來將文件一個一個地複製到文件夾中,這樣
01.txt
就是 in01.abc
,02.txt
is in02.def
和03.txt
is in03.ghi
。該命令不應考慮文件夾的名稱,而是用自上而下的文件填充文件夾(每個文件夾一個文件)。非常感謝!
編輯1:
我已將程式碼從移動文件更改為多個文件夾$$ closed $$如下:
#!/bin/bash LISTFILESCMD='ls *.txt' FQUANTITY=1 FOLDERLIST=`seq -w 1 3` for FOLDER in $FOLDERLIST; do mv `$LISTFILESCMD | head -n $FQUANTITY` $FOLDER; done
結果是,這 3 個文件位於第 3 個文件夾中。
編輯2:
不,使用 FQUANTITY=3 文件進入第一個文件夾。
使用 FQUANTITY=1 時,上面的腳本有效。但如果文件名或文件夾名包含空格,它就不能正常工作。
我製作了第二個腳本,它也適用於文件名中的空格,但前提是文件名包含點,並且如果文件夾名包含空格,則此腳本不起作用。我想知道,如何使它在文件夾名中的空格和/或文件名中沒有點的情況下也能正常工作:
#!/bin/bash array1=(*/) # folder array2=(*.*) # file for ((i=0;i<${#array2[@]};++i)); do mv "${array2[i]}" "${array1[i]}" done
謝謝!
結果是,這 3 個文件位於第 3 個文件夾中。
你的意思是:第一個文件夾?如果您總共只有 3 個文件,為什麼要選擇 fquantity=3?它是每個文件夾的文件數量!
我測試了那個for循環,到目前為止它工作正常。您必須選擇正確的“數量”才能將文件均勻地分配到目錄中。
你的 Q 真的有點難以理解,你給的文件名和數量。並且:01.txt 屬於 01.abc,“但名稱不應該考慮”。
例如,您有 3000 個文件應該移動到 17 個文件夾中。或者是每個最大的 x 個文件夾。200 個文件?這將是第一步,簡單的數學運算和帶計數器的循環。
然後是“健壯性”(空白)和性能問題,以及如何使用標準命令來簡化“程序”。
你的例子:
for FOLDER in $FOLDERLIST; do mv `$LISTFILESCMD | head -n $FQUANTITY` $FOLDER; done
在某種程度上很優雅,因為它不需要文件列表:它讀取剩餘的(未移動的)文件。而且它應該足夠快,因為你只用一個大
mv
命令填充每個文件夾一次。通過為
head
(fquantity)選擇正確的參數,我可以根據需要將 7 個文件 mv 到 3 個目錄 — 我以為我想要 3-3-1。但是如果我選擇數量“7”,我會在 FIRST 目錄中獲得所有 7 個文件。使用“1”我得到 1-1-1 和四個未移動的文件。理想的情況是 3-2-2 ……所以可能涉及的數學甚至不是那麼簡單。但是:帶有空格的文件名不會被移動,並且它的部分未被
mv
. 作者似乎很驚訝,並評論說:哦,一定是空格問題。