获取从一个文件夹复制到另一个文件夹的每个文件的文件路径

获取从一个文件夹复制到另一个文件夹的每个文件的文件路径

我使用的是 Ubuntu 18.04 LTS,我希望将文件从一个文件夹复制到另一个文件夹,同时还希望将从folder1复制到folder2的每个文件的文件路径存储在第三个文件中,并以空格作为分隔符。
注意:由于 cp 命令不返回任何输出,因此将其存储在文件中将不起作用。

欢迎使用可以通过终端运行的任何命令或脚本组合。

请不要建议任何其他软件。

答案1

使用 POSIX 命令并假设文件和目录的名称不包含换行符:

src=/some/dir
dst=/some/other/dir
file_list=/path/to/list.txt
(cd -P -- "$src" && find . |
  tee -- "$file_list" |
  pax -rwdpe -- "$dst")

路径将相对于$src$dst目录(需要预先存在)。

GNU 实现cp(如 Ubuntu 上所示)有一个-v选项可以让它告诉它正在做什么。

LC_ALL=C cp -va -- "$src" "$dst" > "$file_list"

将创建一个list.txt包含以下内容的内容:

'/some/dir' -> '/some/other/dir'
'/some/dir/file' -> '/some/other/dir/file'
[...]

另一种选择是使用(不是标准命令,但 Ubuntu默认tar带有 GNU ):tar

(cd -P -- "$src" && tar cf - .) |
  (cd -P -- "$dst" && tar xvf - > "$file_list")

答案2

find和的组合cpio可用于递归地将所有文件和子文件夹从 复制folder1folder2。在tee中间,您可以将所有文件名(相对于folder1)写入outputfile.

cd folder1 && find . -depth | tee outputfile | cpio -pdm folder2

该命令cd folder1是必要的,因为cpio想要获取相对于源文件夹的文件名。

folder2必须指定为绝对或相对于folder1

要仅复制文件,您可以修改find命令:

... find . -type f -maxdepth 1 ...

相关内容