我把所有音乐都放在一个文件夹中/media/kalenpw/MyBook/Music/ABunchOfOtherFoldersWithFilesInside
。我想把所有 mp3 复制到其中,/media/kalenpw/HDD/Music
所以我使用了:
cp -R /media/kalenpw/MyBook/Music/*.mp3 /media/kalenpw/HDD/Music
但是,这只复制了根音乐文件夹中的 mp3,并没有打开任何艺术家子目录并复制这些文件。
我以为-R
会递归复制所有文件。我该如何实现该目标?
答案1
使用:
find /media/kalenpw/MyBook/Music/ -name '*.mp3' -exec cp {} /media/kalenpw/HDD/Music \;
您的命令不起作用的原因是包含通配符(*.mp3
)的名称在运行命令之前会被扩展,因此如果您有三个文件(01.mp3
,, ) 02.mp3
,03.mp3
您的有效命令是:
cp -R /media/kalenpw/MyBook/Music/01.mp3 /media/kalenpw/MyBook/Music/02.mp3 /media/kalenpw/MyBook/Music/03.mp3 /media/kalenpw/HDD/Music
正如您所见,-R
在这种情况下没有效果。
答案2
您明确提到要复制的文件/目录,即使用以*.mp3
结尾的任何文件/目录名称.mp3
。
.mp3
因此,任何以in结尾的文件以及以in/media/kalenpw/MyBook/Music/
结尾的目录都将被递归复制。如果没有匹配的文件/目录,则不会复制任何内容。.mp3
/media/kalenpw/MyBook/Music/
现在将所有.mp3
文件从/media/kalenpw/MyBook/Music/
递归复制到目录/media/kalenpw/HDD/Music/
:
使用
bash
:shopt -s globstar cp -at /media/kalenpw/HDD/Music /media/kalenpw/MyBook/Music/**/*.mp3
使用
find
:find /media/kalenpw/MyBook/Music -type f -name '*.mp3' -exec cp -at /media/kalenpw/HDD/Music {} +
答案3
最简单的方法是使用没有通配符且只有目录名称的复制命令:
cd /media/kalenpw/HDD
cp -r /media/kalenpw/MyBook/Music .
如果当前目录中还没有名为 Music 的目录,则此操作将在当前目录中创建一个新的 Music 目录。如果您已经有一个名为 Music 的目录,则此操作会将其内容复制到现有的 Music 目录中。当然,此操作将获取所有文件,而不仅仅是 .mp3 文件,因此可能无法为您提供所需的灵活性。