Files

將文件從一個目錄複製到另一個目錄

  • May 23, 2018

我必須將一組文件從一個文件夾複製到另一個文件夾,並且我正在使用以下命令:

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

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