【问题标题】:copying a list of files via terminal通过终端复制文件列表
【发布时间】:2010-12-15 06:50:37
【问题描述】:

我有一个名为 list.txt 的文件名列表。

我想将此列表中的文件复制到一个新文件夹。

我该怎么做呢?

谢谢!

【问题讨论】:

  • 这是一个shell脚本问题——它是关于编程的。

标签: macos unix command-line terminal


【解决方案1】:

你可以这样做:

cp `cat list.txt` new-folder/

请注意,使用此方法时应避免在文件名中包含空格(如果是这种情况,则需要另一种解决方案。

反引号执行cat list.txt 命令并使用该命令的输出 作为cp 命令行的一部分。 cat 输出中的换行符在命令行替换之前折叠为空格。

【讨论】:

  • 请注意,这会展平文件中的任何目录层次结构 - 它们都将位于一个目录中。
  • 确实如此。该问题陈述了“文件名列表”而不是“路径名列表”。
  • 我同意 - 这不是问题,除非提问者没有考虑过这个问题。相反,我的回答可能不是提问者想要的——正是因为它确实保留了目录结构。想要在保留一些目录结构的同时从名称中删除路径的某些部分,这绝非闻所未闻 - 没有一个答案涉及。
【解决方案2】:

如果您想保留目录结构,请使用以下其中一种(假设 GNU tar):

cpio -pvdm /destination <list.txt

tar -cf - -F list.txt | tar -C /destination -x

在这两种情况下,最终结果是 /destination 是 list.txt 中文件名的前缀。

【讨论】:

    【解决方案3】:

    使用循环

    while read -r line
    do
      cp "$line" /destination
    done <"file"
    

    【讨论】:

    • 请注意,这会展平文件中的任何目录层次结构 - 它们都将位于一个目录中。
    • 是的,但 oP 并没有说他需要具有相同的结构。他特别指出“复制.....到一个新文件夹”。
    【解决方案4】:

    循环:

    dest="<destination folder>" #keep the quotes
    for i in `cat < list.txt` #loop each line of list.txt
    do
    cp $i $dest #in each loop copy $i, e/a line of list.txt to $dest
    echo "Done."
    done
    

    经过测试。确保“./list.txt”存在,否则手动填写绝对路径。 :)

    【讨论】:

    • 原发帖者不想将文件 list.txt 移动到新文件夹中;相反,list.txt 包含要移动的文件列表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2015-01-17
    • 1970-01-01
    • 2012-05-02
    • 2014-07-06
    • 2017-08-08
    相关资源
    最近更新 更多