遞歸移動目錄的內容
我想遞歸地將文件從一個文件夾(圖片)移動到另一個文件夾(圖片新)。
“圖片”文件夾有很多子文件夾,因此我在跟進這裡的文章後使用了這個命令。
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
,你不會把它放在這個管道中,因為它不起作用。它需要確認。