所以,我想将所有.xml从一个目录(带子目录)移动到一个新目录;但是,如果文件在子目录中,我希望它们保留在子目录中。基本上,我有一堆已经分类的文件,我只想要它们的一部分,但我仍然需要它们保持分离。我编写了这个简单的命令,它将遍历我的cwd及其子目录中的所有.xml文件,但这会将所有内容放入一个目录中:
find . -name "*.xml" -exec mv {} ~/Desktop/test/ \;
我不知道如何通过此命令创建新的子目录/将每个文件发送到其各自的新位置。我知道我可以通过perl或其他语言来做到这一点,但我希望能够通过终端命令来做到这一点(我正在尝试学习如何使用bash玩法)。
提前致谢。
答案 0 :(得分:6)
使用tar
复制具有目录结构的文件:
find . -name "*.xml" -print0 |
tar -cf - --null -T- |
tar -C ~/Desktop/test/ -xf -
或者,您可以将cp
与--parents
选项一起使用:
find . -name "*.xml" -exec cp -a -t ~/Desktop/test/ --parents {} +
答案 1 :(得分:2)
您可以尝试以下内容:
find . -name "*.xml" -exec sh -c 'mkdir -p ~/Desktop/`dirname "{}"`; mv "{}" ~/Desktop/`dirname "{}"`' \;
答案 2 :(得分:1)
对于某些情况,我喜欢cpio
命令
any_command_what_produces_relative_path_names | cpio -pamVd /new/parent/dir
例如:
find . -name \*.xml -print0 | cpio -pamvd0 /new/parent/dir
或过滤find
的输出find . -name \*.xml -print0 |\
grep -zP 'only_some_of_them' |\
cpio -pamvd0 /new/parent/dir
或只有那些,包含字符串“blabla”
find . -name \*.xml -print0 |\
xargs -0 grep -zl "blabla" |\
cpio -pamvd0 /new/parent/dir