Shell

如何將文件一個一個複製到不同的文件夾?

  • August 7, 2019

在一個目錄中,我有名稱為:

01.txt 02.txt 03.txt

在同一目錄中是具有以下名稱的文件夾:

01.abc 02.def 03.ghi

我需要一個命令來將文件一個一個地複製到文件夾中,這樣01.txt就是 in 01.abc02.txtis in02.def03.txtis in 03.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. 作者似乎很驚訝,並評論說:哦,一定是空格問題

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