Unix:按顺序复制文件

Unix:按顺序复制文件

我记得很久以前我就用过这样的东西:在 Total Commander 中,我在复制对话框中按下 F2 - 将“复制任务”添加到“复制队列”中。这样,所有这些文件都按顺序复制了。有没有简单的工具可以进行这种“顺序”复制?

编辑:我想动态地将“复制任务”添加到队列中。

示例:我有很多大文件。我知道我想复制文件 A。在复制文件 A 时,我知道我还必须将文件 B 复制到某个地方,但我需要在复制完 A 后立即开始复制。

答案1

我不确定你的意思,这是复制命令的默认行为(cp):

  • 复制多个文件:

    cp *txt *jpg destination_dir
    

以下是一些更复杂操作的示例:

  1. 复制从列表中读取的所有文件(假设文件名合理,没有空格或奇怪的字符):

    while read n; do cp $n destination_dir < file_list.txt
    
  2. 与上述相同,但适用于包含空格或奇怪字符的文件名:

    while IFS= read -r n; do cp "$n" destination_dir < file_list.txt
    
  3. 查找所有与模式匹配的文件并复制它们:

    find . -name "*data*" -exec cp {} destination_dir \;
    
  4. 与上述类似,但适用于奇怪的文件名:

    find . -print0 -name "*data*" | xargs -0 cp -t destination_dir \;
    

我还是不明白为什么你可能想这样做,但没关系。要添加在当前操作结束后执行的复制操作,你可以这样做:

  1. 创建要复制的文件列表。由于您从一个文件开始,因此列表将仅包含一个文件名:

    echo "fileA" > list.txt
    
  2. 通过读取列表开始复制文件(和前面一样,假设理智的文件名,如果您的文件名可以包含空格或奇怪的非字母数字字符,请使用上面列表中的示例 2):

    while read n; do cp -v $n destination_dir < file_list.txt
    
  3. 找到下一个要复制的文件并将其添加到列表中:

    echo "fileB" >> list.txt
    

只要在复制完成之前执行第 3 步,则第一个文件完成后就会立即复制下一个文件。

我只是不明白为什么你不直接启动多个独立cp命令。据我所知,你毫无理由地把事情复杂化了。

相关内容