从文件列表中移动文件

从文件列表中移动文件

因此,我在文本文件中有一个文件列表。我相信它大约有 100,000 个文件。

该列表中的文件分布在许多目录中,具有不同的大小、文件名、扩展名、年龄等。

我正在尝试找到一种方法来将这些文件移动到另一个驱动器。

复杂因素:有些文件有相同的名称,但不是同一个文件。它们不能被移动到一个文件夹中,并且对多个文件采用覆盖或忽略策略。

最好,我希望它们保留它们的目录结构,但只在目标目录中保留我想要的文件。(目标驱动器不够大,无法简单地复制所有内容)。

以下是文件中某些行的示例:

    media/dave/xdd/cruzer/F#(NTFS 1)/Raw Files/Portable Network Graphic file/3601-3900/FILE3776.PNG/Windows/winsxs/amd64_microsoft-windows-o..disc-style-memories_31bf3856ad364e35_6.1.7600.16385_none_51190840a935f980/Title_mainImage-mask.png

媒体/dave/xdd/d1/other/hd1/Program Files/DVD Maker/Shared/DvdStyles/Memories/Title_content-background.png

我曾尝试使用

    rsync -a --files-from=/sourcefile.txt / /media/destinationhdd

但是,这只是试图将我的根目录复制到目标。请帮忙,我该如何复制我想要的那些文件?

答案1

我假设一个类 Unix 环境,所以我将用 bash 脚本编写它,但在类似的脚本语言中概念大致相同......

在文件列表中的文件所属的目录中运行此脚本...

#!/bin/sh

# (naive) File migration script

IFS=$'\n'
destination_path = "/path/to/destination/here/"

for file in `cat filelist.txt`
do
    cp -v --parents $file $destination_path
done

这样做的目的是,在复制到指定目标时,您可以保留源父目录结构。rsync 非常适合备份您定期更新的整个文件,因为这是算法所针对的。但对于更简单的操作,包装在简单脚本中的基本 Unix 命令就足够了。请注意,这还会设置IFS通常包含的 bash 变量,<space><tab><newline>尽管该设置在脚本退出时可能不会保留。

相关内容