Files
將文件從一個目錄複製到另一個目錄
我必須將一組文件從一個文件夾複製到另一個文件夾,並且我正在使用以下命令:
cp -rf `head -n 100 /home/tmp/abc.txt` /home/tmp/test/files
文件內容
abc.txt
如下:./folder1/example.tar.gz ./folder2/example.tar.gz ./folder3/example.tar.gz
但是在執行上述
cp
命令時,我得到:cp: will not overwrite just-created `/home/tmp/test/files/example.tar.gz' with `./folder3 /example.tar.gz' cp: will not overwrite just-created `/home/tmp/test/files/example.tar.gz' with `./folder1/example.tar.gz'
我可以理解,因為 .gz 文件的名稱與錯誤中顯示的名稱相同。我想要做的是在內部具有
/home/tmp/test/files
與中列出的相同的文件夾結構abc.txt
,例如:/home/tmp/test/files/folder1/example.tar.gz /home/tmp/test/files/folder2/example.tar.gz /home/tmp/test/files/folder3/example.tar.gz
example.tar.gz
但是在執行上述cp
命令後,我只得到一個內部文件夾。那麼得到我上面提到的東西的方法是什麼?
cp不行
您的範例將不起作用,因為 copy 不會複製目錄結構,它只會復製文件,因此會出現您遇到的錯誤消息。要進行這樣的深層複製,您可以使用
tar
命令並使用構造tar cvf - --files-from=... | (cd /home/tmp/test/files/; tar xvf -)
,也可以只使用rsync
.rsync
如果我是你,我
rsync
會這樣做:$ rsync -avz --files-from=abc.txt /src /home/tmp/test/files/.
如果您只想要文件中的第 100 行,
abc.txt
您可以這樣做:$ rsync -avz --files-from=<(head -n 100 abc.txt) /src /home/tmp/test/files/.
例子
範例文件夾數據:
$ tree /home/saml/tmp/folder* /home/saml/tmp/folder1 `-- example.tar.gz /home/saml/tmp/folder2 `-- example.tar.gz /home/saml/tmp/folder3 `-- example.tar.gz
現在復製文件:
$ rsync -avz --files-from=<(head -n 3 /home/saml/tmp/abc.txt) \ /home/saml/tmp/. /home/saml/tmp/test/files/. building file list ... done ./ folder1/ folder1/example.tar.gz folder2/ folder2/example.tar.gz folder3/ folder3/example.tar.gz sent 3147093 bytes received 81 bytes 6294348.00 bytes/sec total size is 3145728 speedup is 1.00
確認它們已被複製:
$ tree /home/saml/tmp/test/files /home/saml/tmp/test/files |-- folder1 | `-- example.tar.gz |-- folder2 | `-- example.tar.gz `-- folder3 `-- example.tar.gz
柏油
如果你感興趣,這裡是你如何使用 just
tar
。$ cd /home/saml/tmp $ tar cvf - --files-from=<(head -n 3 /home/saml/tmp/abc.txt) | (cd /home/saml/tmp/test/files/; tar xvf -) ./folder1/example.tar.gz ./folder1/example.tar.gz ./folder2/example.tar.gz ./folder2/example.tar.gz ./folder3/example.tar.gz ./folder3/example.tar.gz
確認它複製了:
$ tree /home/saml/tmp/test/files /home/saml/tmp/test/files |-- folder1 | `-- example.tar.gz |-- folder2 | `-- example.tar.gz `-- folder3 `-- example.tar.gz