n61*_*007 4 unix cygwin command-line
有没有办法复制共享公共基本目录的文件列表,保留它们的相对目录结构?具有相对路径的文件列在文本文件中。 编辑我在纯文本文件中列出了文件名。
我想在不使用脚本(没有 bash/batch/python/ruby/lua/etc.)的情况下执行此操作,类似于wget -i
url 的工作方式。(我的原因是它会为相当常见的任务提供开销/非标准解决方案。)
我试着cat list.txt | xargs -I % cp % new_folder
从文件的副本列表,但它并没有保持相对目录路径。
我这样做是为了从具有大量文件(不时发生)的目录结构中导出我选择的文件(我已经在文本文件中)。
小智 5
tar cvf - ./filesAndDirecotries | (cd targetDirectory ; tar xvf - )
TAR(磁带存档是创建存档文件的旧命令)可以写入标准输入(文件的“-”参数)和管道并从第二个目录中的标准输入读取。
上面的命令首先创建一个 tar 文件并写入 stdin 并通过管道传输到 shell 并更改目录并通过从 stdin 读取文件来解压缩文件。
该答案的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.txt
tar xvf intermediate.tar -C newdir