有没有办法复制共享公共基目录的文件列表,并保留它们的相对目录结构?具有相对路径的文件列在文本文件中。 编辑我有一个纯文本文件中列出的文件名。
我想这样做没有使用脚本(没有 bash/batch/python/ruby/lua/etc.),类似于wget -i
url 的工作方式。(我的理由是,对于相当常见的任务,它会提供开销/非标准解决方案。)
我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.txt
和tar 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
较短但不幸的是不保留模式。)