Bash xargs oneliner解压文件
从bash命令行中,我必须找到名称与系统中某个模式匹配的所有zip文件,然后将它们解压缩到我的目录中 我想在子文件夹中组织解压缩文件,并且我想根据原始zip文件名(不使用完整路径)使用自定义命名约定选择我的子文件夹名称 我知道for循环是有效的,因为我现在正在学习xargs,我想知道我是否可以在xargs oneliner中做同样的事情;类似于:Bash xargs oneliner解压文件,bash,xargs,Bash,Xargs,从bash命令行中,我必须找到名称与系统中某个模式匹配的所有zip文件,然后将它们解压缩到我的目录中 我想在子文件夹中组织解压缩文件,并且我想根据原始zip文件名(不使用完整路径)使用自定义命名约定选择我的子文件夹名称 我知道for循环是有效的,因为我现在正在学习xargs,我想知道我是否可以在xargs oneliner中做同样的事情;类似于: locate -r "<zipped files regex>" | xargs -i -t "foldername=$(echo {}
locate -r "<zipped files regex>" | xargs -i -t "foldername=$(echo {} | sed 's/.*\///'); mkdir -p $folderName; unzip {} -d $folderName"
你能帮我把它弄好吗
谢谢 在
$()
中的echo{}sed的/*\/'
在任何其他操作之前、xargs之前和locate之前执行。因此,使用xargs很难做到这一点。不使用xargs的一种方法:
locate -r [.]zip$ | \
sed 's!.*/\([^/]*\)$!mkdir -p "\1"; unzip -n -d "\1" "&";!' | \
sh 2> ERRORS
使用GNU Parallel可提高可读性并尽可能加快速度:
locate -r [.]zip$ | parallel "mkdir -p {/.}; cd {/.} && unzip {}"
观看简介视频,快速介绍:
浏览教程(man parallel_教程)。您可以使用命令行
我爱你。当前命令到底有什么问题?另外,您能否提供一个
的示例以使其可复制?Xargs将所有内容传递给一个zip命令,zip一次只能处理一个zip文件,因此您应该使用for循环或查找-exec
@SamiLaine很好,但是xargs
有一个-n
(--max args
)选项。不过,将find
与-exec
一起使用更简单。@Lev:例如locate-r“*libs_j.*jar$””;xargs-i-t“foldername=$(echo{}sed's/*\/');mkdir-p foldername;unzip{}-d$foldername”
@FrancescoS。您可以通过问题添加更多信息。此外,提供错误消息或“不工作”的其他详细信息总是有帮助的。您有-t
,它应该打印它生成的命令。它们看起来正确吗?我不知道sed的这种用法,绝对聪明的解决方案!谢谢!这有效地使sed
成为更智能、更健壮的xargs
locate -r [.]zip$ | parallel "mkdir -p {/.}; cd {/.} && unzip {}"