我需要从 1000 个文件夹中提取超过 2k 个文件。问题是,每个文件夹的内部和内部都有一个压缩文件夹,还有另一个名为“fileholder”的文件夹,其中包含我需要获取的一些 temp.processed 文件类型。有什么方法可以搜索所有这些文件并将它们复制到另一个位置吗?或者我必须提取所有 zip 文件吗?
我跑过:
find -type f -iname \*.PROCESSED
但这不会在压缩文件内搜索。有人能指出我正确的方向吗?
答案1
我会通过两次电话来完成find
:
- 一种查找所有
zip
文件然后处理它们的方法 - 另一个处理常规文件
这个有点麻烦,复杂的部分是awk
调用。它处理的输出对unzip -l
脚本不太友好。它搜索以数字开头的行(以消除标题),消除空行,最后.process
以不区分大小写的方式进行匹配。
FINDDIR="."
for f in `find "$FINDDIR" -type f -iname '*.zip'`; do
dir=`dirname "$f"`
for p in `unzip -l sth.zip | awk '{if (match($1, /^[0-9]+$/) && $1 > 0 && match(tolower($4), /\.processed$/)) print $4}'`; do
echo "$dir/$p"
done
find "$FINDDIR" -type f -iname '*.processed'
这无法处理递归zip
,即如果一个 zip 存档位于另一个 zip 存档内。