复制保留目录结构的文件列表,没有脚本

n61*_*007 4 unix cygwin command-line

有没有办法复制共享公共基本目录的文件列表,保留它们的相对目录结构?具有相对路径的文件列在文本文件中。 编辑我在纯文本文件中列出了文件名。

我想在使用脚本(没有 bash/batch/python/ruby/lua/etc.)的情况下执行此操作,类似于wget -iurl 的工作方式。(我的原因是它会为相当常见的任务提供开销/非标准解决方案。)

我试着cat list.txt | xargs -I % cp % new_folder文件的副本列表,但它并没有保持相对目录路径。

我这样做是为了从具有大量文件(不时发生)的目录结构中导出我选择的文件(我已经在文本文件中)。

小智 5

tar cvf - ./filesAndDirecotries | (cd targetDirectory ; tar xvf - )

TAR(磁带存档是创建存档文件的旧命令)可以写入标准输入(文件的“-”参数)和管道并从第二个目录中的标准输入读取。

上面的命令首先创建一个 tar 文件并写入 stdin 并通过管道传输到 shell 并更改目录并通过从 stdin 读取文件来解压缩文件。


n61*_*007 5

答案unixUser把我在正确的轨道上。事实证明,tar可以使用 读取文本文件中的文件名和目录名-T,甚至可以使用 更改目录-C

tar cvf - -T filelist.txt | tar xvf - -C newdir
Run Code Online (Sandbox Code Playgroud)

这回答了我的问题。


来源

获得此信息来自想法unixUser给我,我躲开了 从文本文件的tar文件,导致trpn的(Q)和Tinkster的(A)转换上linuxquestions.org。同时检查tar 手册页是否有与file 相关的任何选项,这两个搜索都导致了-T切换!为了避免依赖 shell 来更改目录,我还搜索了任何与目录相关的选项并找到了-C开关。——我看这tar大概 命令用于以多种方式对文件进行分组(副本)。

有了这个,人们可以使用一些 tar 二进制文件而无需*依赖脚本。真是太神奇了 tar 是多么有用。


(*:出于偏好:我发现 bash/perl/python/whatever 是完成这项非常精确的任务的过于通用的工具。但是,正如grawity指出那样,管道很方便 -如果没有它们,应该被迫创建一个中间文件,例如。和。)tar cvf intermediate.tar -T filelist.txttar xvf intermediate.tar -C newdir