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

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

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

我想这样做没有使用脚本(没有 bash/batch/python/ruby/lua/etc.),类似于wget -iurl 的工作方式。(我的理由是,对于相当常见的任务,它会提供开销/非标准解决方案。)

cat list.txt | xargs -I % cp % new_folder试过复制文件列表但它没有保留相对目录路径。

我会这样做以便从包含大量文件的目录结构(有时会发生)中导出我选择的文件(我已经在文本文件中)。

答案1

焦油-./filesAndDirecotries | (cd 目标目录; tar xvf-

TAR(Tape Archive 是创建存档文件的旧命令)可以写入 stdin(文件的“-”参数)并通过管道从第二个目录中的 stdin 读取。

上述命令首先创建一个 tar 文件并将其写入 stdin,并通过管道传输到 shell 并更改目录,然后通过从 stdin 读取该文件来解压该文件。

答案2

回答unix用户让我走上正轨。事实证明,tar可以使用 从文本文件中读取文件和目录名称-T,甚至可以使用 更改目录-C

tar cvf - -T filelist.txt | tar xvf - -C newdir

这回答了我的疑问。


来源

获取此信息来自unixUser 给我的想法, 我有躲避 来自文本文件的 tar 文件, 导致色氨酸(Q)和廷克斯特的(A)linuxquestions.org 上的转换. 同时检查tar 手册页对于任何与文件,两次搜索都导致-T切换!为了避免依赖 shell 来更改目录,我还搜索它对于任何目录相关选项并找到了-C开关。--我明白这tar可能是用于以多种方式对文件(副本)进行分组的命令。

有了它,人们就可以使用一些 tar 二进制文件而不必依赖脚本。tar 的用处真是令人惊叹。


(*: 在......之外偏爱:我发现 bash/perl/python/whatever 是太笼统此工具相当准确任务。然而,指出经过重力,管道方便——没有他们应该强制创建一个中间文件,例如tar cvf intermediate.tar -T filelist.txttar xvf intermediate.tar -C newdir。)

答案3

从技术上讲,您给出的示例已经使用了 bash。这正是 shell 可以编写脚本的原因——这是一项非常简单的任务,不需要专用的工具/程序只是为了它。

cat list.txt | xargs -n1 目录名称 | 排序 | uniq | xargs -I% mkdir -p new_folder/%
cat list.txt | xargs -I%cp%new_folder/%

或者:

cat list.txt | 读取路径时;执行
    mkdir -p“新文件夹/${路径%/*}”&& cp“$路径”“新文件夹/$路径”
完毕

或者:

cat list.txt | xargs -I%安装-Dm0644%new_folder/%

或者:

cat list.txt | 读取路径时;执行
    安装-Dm0644“$path”“new_folder/$path”
完毕

install较短但不幸的是不保留模式。)

相关内容