Cp

將多個文件複製到多個目錄

  • June 8, 2012

我在不同目錄中複製許多文件時遇到問題。讓我更好地解釋一下:

假設我在目錄中有以下內容:

$ ls
file1 file2 file3 file4 file5 dir1 dir2 dir3

我想用一個命令複製每個 dir* 中的每個文件*。我試過:

echo dir{1..3} | xargs cp file{1..5} '{}' \;

我的意圖是告訴 xargs 處理來自 echo 的每個 dir* 並複制處理過的輸入中的所有文件,但這和類似的方法都不起作用。我想避免使用腳本,因為這是我必須為大約 20 個目錄重複的任務,而且文件的名稱略有不同,所以我更喜歡修改命令而不是腳本。

echo dir[1-3] | xargs -r -n1 cp file[1-5]

您在使用 xargs 時犯了一個小錯誤。如果沒有 -n 參數,xargs 會將輸入中的所有參數附加到命令中,並且echo dir{1..3}不會在每個條目之間添加必要的輸入,因此 xargs 會將結果視為一個參數。

xargs 有一個選項 -n 可以限制條目的數量,您需要使用 \n 或 \0 作為分隔符列出目錄:

find . -mindepth 1 -maxdepth 1 -type d -print0 | xargs -0 -n 1 cp file{1..5}

find 命令將查找目前目錄中的所有目錄並使用 \0 作為分隔符(如果您有帶空格的目錄,這會更好),而 xargs 使用 \0 作為分隔符並每次僅使用 1 個參數啟動命令。

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