ls -R *.mp3
如何使用递归命令(例如在包含多个子目录的目录中)找到 *.mp3 文件,然后最终将这些文件复制到我选择的目录中。
感谢您的支持。
答案1
命令是:
find /path/to/directory -name "*.mp3" -exec cp {} /some/other/dir/ \;
选择:
find /path/to/dir/ -name '*.mp3' | xargs cp -t /target/
例子:
alex@MaD-pc:~/test$ ls
1 2 3
alex@MaD-pc:~/test$ ls 1 2 3
1:
1.txt 2.mp3 3.txt
2:
4.txt 5.mp3 6.txt
3:
alex@MaD-pc:~/test$ find . -name "*.mp3" -exec cp {} 3/ \;
alex@MaD-pc:~/test$ ls 3
2.mp3 5.mp3
了解更多信息:
man find
答案2
还有另一种方法,我认为它非常适合您的目的。您可以将其find
与while
循环结合使用,甚至不需要使用其中任何一个exec
或xargs
根本不需要使用。例如,如果您想mp3s
将下载文件夹复制到音乐文件夹,则可以使用以下脚本,我已经多次使用过该脚本。
您可以通过更改搜索和放置结果文件的目录来修改它find
;如果没有指定目录,find
将搜索整个主文件夹。您也可以更改cp
为mv
或其他命令。它非常快,因为我刚刚用 3945 个.jpg
文件测试过它!将其复制到文本编辑器中,保存,然后通过运行使其可执行chmod +x myscript
。
#!/bin/bash
# a script to recursively find and copy files to a desired location
find ~/Downloads -type f -iname '*.mp3' -print0 |
while IFS= read -r -d '' f;
do cp -- "$f" ~/Music ;
done
在这个著名的 Bash wiki 上它显示了将while
循环和read
命令结合起来处理find
命令的输出是多么有用;我这样做的方式确保了脚本在遇到带有空格或其他意外或特殊字符的文件名时不会中断。
有关该find
命令的更多常规信息,请在终端中输入man find
或查看Ubuntu 在线手册页有关 find 用法的详细介绍,请参阅本文也一样。