因此,我在文本文件中有一个文件列表。我相信它大约有 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>
尽管该设置在脚本退出时可能不会保留。