Man*_*ano 6 directory cp files
我必须将一组文件从一个文件夹复制到另一个文件夹,我正在使用以下命令:
cp -rf `head -n 100 /home/tmp/abc.txt` /home/tmp/test/files
Run Code Online (Sandbox Code Playgroud)
中的文件内容abc.txt
如下:
./folder1/example.tar.gz
./folder2/example.tar.gz
./folder3/example.tar.gz
Run Code Online (Sandbox Code Playgroud)
但是在执行上述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'
Run Code Online (Sandbox Code Playgroud)
我可以理解,因为 .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
Run Code Online (Sandbox Code Playgroud)
但是example.tar.gz
在执行上述cp
命令后,我在文件夹中只得到一个。
那么有什么方法可以得到我上面提到的东西呢?
您的示例无法正常工作,因为 copy 不会复制目录结构,它只会复制文件,因此会出现您遇到的错误消息。要进行这样的深层复制,您可以使用tar
命令并使用构造tar cvf - --files-from=... | (cd /home/tmp/test/files/; tar xvf -)
,也可以只使用rsync
.
如果我是你,我rsync
会这样做:
$ rsync -avz --files-from=abc.txt /src /home/tmp/test/files/.
Run Code Online (Sandbox Code Playgroud)
如果您只想要文件中的第 100 行,abc.txt
您可以这样做:
$ rsync -avz --files-from=<(head -n 100 abc.txt) /src /home/tmp/test/files/.
Run Code Online (Sandbox Code Playgroud)
示例文件夹数据:
$ 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
Run Code Online (Sandbox Code Playgroud)
现在复制文件:
$ 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
Run Code Online (Sandbox Code Playgroud)
确认它们已被复制:
$ tree /home/saml/tmp/test/files
/home/saml/tmp/test/files
|-- folder1
| `-- example.tar.gz
|-- folder2
| `-- example.tar.gz
`-- folder3
`-- example.tar.gz
Run Code Online (Sandbox Code Playgroud)
如果您感兴趣,这里是您如何使用 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
Run Code Online (Sandbox Code Playgroud)
确认它复制了:
$ tree /home/saml/tmp/test/files
/home/saml/tmp/test/files
|-- folder1
| `-- example.tar.gz
|-- folder2
| `-- example.tar.gz
`-- folder3
`-- example.tar.gz
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
32730 次 |
最近记录: |