如果我有一个目录 A,其中包含目录 B、C,我需要一个搜索脚本
目录 B、C、D 用于存放 .deb 文件,如果找到则将它们复制到我选择的位置。
该脚本应该可以减少手动搜索和复制的工作量。
任何想法 ?
答案1
如果你不需要递归搜索,那么一个简单的 bash 括号扩展
cp -t /location/you/choose/ /path/to/A/{B,C,D}/*.deb
应该可以。如果你想搜索全部递归地访问 A 的子目录,那么最可移植的方法可能是
find /path/to/A -name '*.deb' -exec cp -t /location/you/choose/ {} +
如果您的 shell 支持,您也可以使用globstar
shell 选项进行cp
递归,而无需使用find
- 在 shell 提示符下键入shopt
或help shopt
获取更多信息。如果您需要排除某些子目录,那么您可以将一个添加-prune
到 find 命令中。
与往常一样,您需要提前考虑在文件名不唯一的情况下要做什么 - 您可以在命令中添加-n
或,或使用选项。对于 deb 文件,这可能无关紧要,因为(除非文件损坏)任何非唯一文件名都应与完全相同的重复文件相对应。--no-clobber
cp
--backup=numbered
答案2
看起来你什么都没试过,但无论如何。这是台词,man find
如果你真的感兴趣的话,我会谈谈的。
find /path/to/A -name "*.deb" -exec mv {} /path/to/new_directory \; # Moves
find /path/to/A -name "*.deb" -exec cp {} /path/to/new_directory \; # Copies
会将 .deb 文件从 A(递归搜索)移动到 new_directory。顺便说一句,这更多是与 *nix 相关,而不是特定于 Ubuntu。