Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash xargs oneliner解压文件_Bash_Xargs - Fatal编程技术网

Bash 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 {}

从bash命令行中,我必须找到名称与系统中某个模式匹配的所有zip文件,然后将它们解压缩到我的目录中

我想在子文件夹中组织解压缩文件,并且我想根据原始zip文件名(不使用完整路径)使用自定义命名约定选择我的子文件夹名称

我知道for循环是有效的,因为我现在正在学习xargs,我想知道我是否可以在xargs oneliner中做同样的事情;类似于:

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 {}"