Move

遞歸移動目錄的內容

  • May 19, 2019

我想遞歸地將文件從一個文件夾(圖片)移動到另一個文件夾(圖片新)。

“圖片”文件夾有很多子文件夾,因此我在跟進這裡的文章後使用了這個命令。

Pictures 和 Picturesnew 都在同一個目錄中。我只是想擺脫所有子文件夾並合併數據。

我從這些文件夾所在的目錄執行了以下命令。

find ./Pictures -type f -name "*.jpg" -print0 | 
xargs -0 -Imysongs mv -i mysongs ./Picturesnew

現在似乎應該出現的 Picturesnew 文件夾根本沒有出現,因此我對我的 20000 個 JPG 文件的去向感到困惑。

你真的想要

mkdir Picturesnew
find Pictures -type f -iname "*.jpg" -exec mv -i {} + Picturesnew/

mv 不創建目錄。

mv 的 -i 選項會導致它在這樣的管道中執行時不起作用。(雖然,從好的方面來說,它希望告訴 mv 不要踩到第一個重命名為 Picturesnew 的文件,而不是原來的文件。)

在我的解決方案中,我告訴 find 為每個執行的 mv 實例移動多個文件(如果有用),以最大程度地減少錯誤(例如將目標目錄名稱的尾隨/關閉並且沒有創建目標目錄)實際上會重命名一個文件,而不是生成所需的錯誤。它還具有允許 mv 實際提示確認是否覆蓋文件的優點,而不是簡單地將下一個文件名視為“否”。

我不知道為什麼在覆蓋時沒有確認,由於-i參數 to應該存在mv。但是假設您沒有使用它並且Picturesnew在操作後有一個 jpg 文件,正如您在問題下的評論中所述,那麼您將同一個文件覆蓋了 20000 次。

xargs -0 -Imysongs mv -i mysongs ./Picturesnew

這意味著對於每個參數,該命令將被執行:

mv -i argument ./Picutesnew

由於沒有目錄./Picturesnew,該命令mv認為您的意思是它應該將文件移動到此處並重命名為./Picturesnew. 它這樣做了20000次。

管道完成執行後,應該只剩下一個文件./Picturesnew。最後一個被搬走了。前面的都沒有了。

因此,這種形式更安全:

mv -i argument ./Picturesnew/

那是因為/最後消除了對Picturesnew應該是什麼的混淆。

至於-i,你不會把它放在這個管道中,因為它不起作用。它需要確認。

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