我使用的是 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
可用于递归地将所有文件和子文件夹从 复制folder1
到folder2
。在tee
中间,您可以将所有文件名(相对于folder1
)写入outputfile
.
cd folder1 && find . -depth | tee outputfile | cpio -pdm folder2
该命令cd folder1
是必要的,因为cpio
想要获取相对于源文件夹的文件名。
folder2
必须指定为绝对或相对于folder1
。
要仅复制文件,您可以修改find
命令:
... find . -type f -maxdepth 1 ...