veg*_*ega 3 command-line find unzip
假设我有以下目录树
.
??? a1
? ??? sub1
? ??? a1.zip
??? a2
??? sub2
??? a2.zip
Run Code Online (Sandbox Code Playgroud)
当前目录包含a1和a2目录。我想递归搜索,定位并提取所有zip文件,以及一切举动最多a1和a2分别。目标状态是:
.
??? a1
? ??? file1
? ??? file2
??? a2
??? file1
??? file2
Run Code Online (Sandbox Code Playgroud)
文件来自 zip 的位置。我如何做到这一点?为此,我应该在终端中使用哪些工具?
编辑
更具体地说,我提到了递归,因为我们不知道有多少子目录。它可能是:
.
??? a1
? ??? sub1
? ??? sub...
? ??? a1.zip
? ??? text1.txt
??? a2
??? sub2
??? sub...
??? a2.zip
??? text2.txt
Run Code Online (Sandbox Code Playgroud)
目标:
.
??? a1
? ??? file1_unzipped
? ??? text1.txt
??? a2
??? file1_unzipped
??? text2.txt
Run Code Online (Sandbox Code Playgroud)
.zip档案find . -type f -name "*.zip" -exec unzip {} +
Run Code Online (Sandbox Code Playgroud)
find . – 搜索当前目录-type f – 文件-name "*.zip"– 名字匹配*.zip(所以以 结尾.zip),-exec unzip {} +-让所有的比赛和一个长长的名单,并运行unzip它for i in */; do find "$i" -type f -exec mv {} "$i" \; && rm -r "$i"*/; done
Run Code Online (Sandbox Code Playgroud)
for i in */; do …; done – 遍历当前级别的所有目录find "$i" -type f – 搜索当前处理目录及以下目录中的所有文件-exec mv {} "$i" \; – 将它们移动到当前处理的目录&& 仅当上一个命令成功完成时才执行以下操作rm -r "$i"*/ – 删除当前处理目录中的每个子目录