我有一个名为“in”的文件夹,其中包含几个文件夹“a”“b”“c”,我想将所有文件移动到文件夹“proc”并压缩它们。棘手的部分是“in / a”中的文件必须移动到“proc / a”,“in / b”必须移动到“proc / b”等等 我设法找到所有文件并将其压缩为此命令
find . -type f ! \( -name "*gz" -o -name "*tmp" -o -name "*xftp" \) -exec gzip -n '{}' \;
但是我找不到一个通用的命令来移动那些无效的文件,告诉我文件夹的名称。任何人都可以帮我一把吗?
答案 0 :(得分:0)
好吧,我最终发现我还有一些问题,例如目标文件夹不存在,所以我最终使用了这段代码
find . -type f ! \( -name "*gz" -o -name "*tmp" -o -name "*xftp" \) -exec gzip -n '{}' \;
find . -name "*.gz" | cpio -p -dumv $1
if [ "$?" = "0" ]; then
find . -name "*.gz" -exec rm -rf {} \;
else
echo "cpio Failed!" 1>&2
exit 1
fi
第一行找到要处理的所有文件并将其拉链。 第二行找到目标目录的所有文件和副本,在我的例子中它是1美元(参数1),创建尽可能多的文件夹以确保相同的结构。 第三行检查最后一个命令的状态,如果它找不到,并从源文件夹whiteout中删除所有gz文件,删除任何文件夹。如果它没有删除任何内容,那么我就可以分析发生了什么(可能用完了空间)
我敢打赌,使用这么多的磁盘空间可以更快地完成此项操作,但由于这对我来说不是问题所以看起来可以接受。