Unix递归地移动所有文件,但保留结构

Unix递归地移动所有文件,但保留结构,unix,recursion,gzip,hp-ux,mv,Unix,Recursion,Gzip,Hp Ux,Mv,我有一个名为“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 '{}' \; 但是我没有找到一个通用的命令来移动文件,而不是告诉

我有一个名为“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 '{}' \;

但是我没有找到一个通用的命令来移动文件,而不是告诉我文件夹的名称。有人能帮我一下吗?

我最后发现我还有几个问题,例如目标文件夹不存在,所以我使用了这个代码

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(参数1),创建尽可能多的文件夹以确保相同的结构。 第三行检查最后一个命令的状态,如果它能找到并删除源文件夹中的所有gz文件,则不删除任何文件夹。如果它没有删除任何内容,那么我可以分析发生了什么(可能空间不足)


我敢打赌有一种更快的方法来实现这一点,即不用占用这么多的磁盘空间,但因为这对我来说不是问题,所以它看起来是可以接受的;在/$d过程/$d中执行mv;完成?如果文件夹的名称随机变化,并且不是a、b、c等,那么命令必须是通用的,然后使用例如
find
来获取循环的目录列表?或者不要在
-exec
中调用
gzip
,而是使用一个小脚本文件来完成您需要的工作。大thx,我会照您所说的做,我只是在跳,有一个像cpio这样的命令,但移动像mvio;)