![替代 DOS xcopy 命令](https://linux22.com/image/1036138/%E6%9B%BF%E4%BB%A3%20DOS%20xcopy%20%E5%91%BD%E4%BB%A4.png)
在 DOS 中有命令
xcopy /s *.mp3 ..\TEMP2
我如何在 Ubuntu 中执行此操作?
cp -r *.mp3 ../TEMP2
将递归复制所有 mp3 文件,但不幸的是,由于过滤器的原因,没有路径*.mp3
。
cp -r *.* ../TEMP2
会复制路径但不能仅限于 mp3 文件
我看了一下 rsync,但我不明白。
答案1
Ubuntu 中工具的强大之处在于你可以将它们组合起来。下一个命令查找当前目录及其子目录中的所有 .mp3 文件,并将它们复制到文件夹中../TEMP2/
,同时保留路径:
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3'
- 查找所有以.mp3
(不区分大小写)结尾的文件和-exec
- 针对每场比赛执行一个命令:install -D {} ../TEMP2/{}
- 将匹配的文件复制到../TEMP/
保存路径。({}
替换为包含文件名的路径)
\;
- 结束-exec
命令
如果要获取进度,请-ls
在命令前添加(“list”)-exec
。也可以将其放在后面\;
,但这样会在复制后显示名称。示例:
find -iname '*.mp3' -ls -exec install -D {} ../TEMP2/{} \;
find -iname '*.mp3' -exec install -D {} ../TEMP2/{} \; -ls
答案2
有几种选择,但恐怕没有一种是真正简单的……
同步
rsync -r --include="*/" --include="*.mp3" --exclude="*" --prune-empty-dirs . ../TEMP2
这表示排除所有文件 ( exclude="*"
),但查看所有目录 ( include="*/"
) 并包含所有 mp3 文件 ( include="*.mp3"
)。如果您不想复制不包含任何 mp3 文件的目录,则还--prune-empty-dirs
需要附加该选项。
压缩
zip -R archive.zip "*.mp3"
unzip -d ../TEMP2 archive.zip && rm archive.zip
第一个命令创建一个包含所有 mp3 文件的档案,第二个命令将内容解压到目标目录,如果成功则删除档案文件。
寻找
find . -iname "*.mp3" -exec install -D {} ../TEMP2/{} ";"
../TEMP2
这将首先创建目录结构(install -D
),然后找到所有 mp3 文件并将它们复制到目录中的相应路径。
复制全部并删除其余
这只有在你只有几个文件时才有意义不想要复制:
cp -r * ../TEMP2
find ../TEMP2 -type f \! -iname '*.mp3' -delete
这将复制所有内容,然后删除所有非 mp3 文件