移动文本文件中列出的文件,同时保留/创建路径

移动文本文件中列出的文件,同时保留/创建路径

我有一个文本文件,其中包含带有完整路径的文件列表,每一行代表每个文件。例如,文件的第一行是:

/mnt/data/data4/1998/reports/First Quarter.docx

所有文件共享相同的路径,直到“data4”部分(即/mnt/data/data4)。我想做的就是将每个文件移动到不同的驱动器。因此,例如,上述文件将被移动到

/mnt/data/data11/1998/reports/First Quarter.docx

路径的“data11”部分将保持不变,并替换所有文件的现有路径中的“data4”。文本文件和文件名中存在空格。在某些情况下,/data11 之后的目标路径部分已经存在,但在其他情况下则不会。

我想这可以使用单行完成sedxargsmv似乎不太明白。任何建议将不胜感激。

答案1

使用rsync

synclist=$(mktemp)
sed 's,^/mnt/data/data4/,,' filelist.txt > "$synclist"
rsync -avh --files-from="$synclist" --remove-source-files /mnt/data/data4/ /mnt/data/data11/
rm "$synclist"
  1. 创建一个临时文件并将其分配给变量synclist
  2. /mnt/data/data4/从所有行中删除前缀filelist.txt并将输出保存在临时文件中。
  3. $synclist将from中的文件(现在是相对路径)同步/mnt/data/data4//mnt/data/data11/。选项--remove-source-files在传输后删除源文件(类似于mv)。
  4. 删除临时文件。

相关内容