我可以复制*.png
文件而不改变子文件夹地址和名称吗?
例如:复制到/photo
并/pic
转换/photo/2017/hello.png
为/pic/2017/hello.png
。
答案1
首先创建要复制到的目录:
mkdir -p pic/2017
然后复制文件。通常只需要cp
:
cp photo/2017/*.png pic/2017/
正如您所提到的,文件太多,您可能会收到“参数列表太长”错误,我们将根据需要使用printf
和xargs
运行:cp
printf "%s\0" photo/2017/*.png | xargs -0 cp -t pic/2017/
您还可以mcp
使用mmv
包裹方式如下:
mcp -n "photo/2017/*.png" pic/2017/
-n
让我们mcp
只列出更改,删除它以实际执行复制。注意引星号:它不是由 shell 评估,而是由 评估mcp
。
答案2
您想要的是递归复制目录,因此您应该执行以下操作:
cp -a /photo /pic
这将递归复制所有文件和目录并保留文件元数据。
如果/photo
有文件不是png
您不想复制的文件,您可以在执行上述命令后执行以下操作:
find /pic -not -iname '*.png' -type f -print0 | xargs --no-run-if-empty -0 rm