我该如何使用递归命令仅找到* .mp3文件,例如ls -R *.mp3在包含多个子目录的目录中,最后将这些文件复制到我选择的目录中。
谢谢您的支持。
我该如何使用递归命令仅找到* .mp3文件,例如ls -R *.mp3在包含多个子目录的目录中,最后将这些文件复制到我选择的目录中。
谢谢您的支持。
Answers:
该命令是:
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
xargs通常要快很多。我刚刚在这里进行了快速测试,找到了很多c文件并ls -l在其上运行。分别是0m2.420s xargs和0m25.494s -exec...显然,在这种情况下,该cp操作将花费大部分时间,因此可能无关紧要,但值得注意。
-n`` switch to the cp`命令以避免名称重复(或编写在复制前检查是否重复并根据需要重命名目标的脚本)
我认为还有另一种方法可以完美满足您的目的。您可以将其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的详细介绍,请参见本文。
find ~/Downloads -type f -iname '*.mp3' | while read mp3file; do cp "$mp3file" ~/Music; done更简单?
-n`` switch to the cp`命令以避免名称重复(或编写在复制前检查是否重复并根据需要重命名目标的脚本)
find /path/to/dir/ -name '*.c' | xargs cp -t /target/