替代 DOS xcopy 命令

替代 DOS xcopy 命令

在 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 文件

相关内容