我有很多 .CR2 和 .ARW 文件混合在一个按日期构造的目录中(2016 年有文件夹 06 和 07,其中每一天都有一个文件夹。因此文件可能位于 2016/06/03例如)。
我想将 .ARW 文件提取到一个单独的文件夹中,同时保留结构。这可能吗?
也就是说,我想要两个具有相同结构的 2016 文件夹,但其中一个文件夹中只能有 .ARW 文件,而一个文件夹中只能有 .CR2 文件。
答案1
这些 rsync 命令应该可以满足您的要求
这将执行ARW
rsync -arvz --progress --include='*.ARW' --include="*/" --exclude="*" ./source-dir-2016 ./target-ARW-2016
这会做CR2
rsync -arvz --progress --include='*.CR2' --include="*/" --exclude="*" ./source-dir-2016 ./target-CR2-2016
我用了这个帖子作为信息来源。
答案2
find
exec
我会建议使用和的替代方案cp --parents
find ./ -name *.ARW -exec cp --parents {} /home/user/target-ARW-dir/ \;
find ./ -name *.CR2 -exec cp --parents {} /home/user/target-CR2-dir/ \;
这样做的限制是您的工作目录必须位于要复制的文件结构之上。
它的作用的想法:
find
查找文件
./
它将查找的目录
-name *.ARW
只列出以 .ARW 结尾的文件
-exec
对返回的文件列表执行命令
cp --parents
复制并维护目录结构
{}
扩展到每个文件find
报告,将其想象x
为for x in $files
/home/user/target-ARW-dir/
只是一个示例目录,您应该将其更改为您真正想要的目录
\;
终止 a 的正确方法,find -exec
使其像 for 循环一样
答案3
cp
递归地从2016
dir 到 a ,然后2016_ARW
从main 开始,怎么样?rm *.CR2
rm *.ARW
例如
user:~$ ls 2016/06/03/
file_one.ARW file_two.CR2 file_three.CR2 file_four.ARW file_five.ARW
user:~$ cp -R 2016 2016_ARW
user:~$ rm 2016_ARW/06/03/*.CR2
user:~$ rm 2016/06/03/*.ARW
user:~$ ls 2016/06/03/
file_two.CR2 file_three.CR2
user:~$ ls 2016_ARW/06/03/
file_one.ARW file_four.ARW file_five.ARW