我在一个包含许多子目录的目录中收集了大量标准/压缩文件。
现在,我需要将这个结构化目录和所有内容(文件和子目录)复制到另一个磁盘中,并解压缩所有压缩文件。
因此,为了节省时间,我想递归地复制目录中的所有文件并即时解压缩压缩文件。
我怎样才能做到这一点?
答案1
我会将其分为 3 个单独的步骤,使用$SOURCE
和$DEST
作为源目录和目标目录。
在目标目录中重新创建源目录结构
find $SOURCE -type d | sed -e "s~^$SOURCE~~" | xargs -r -I dir mkdir -p "$DEST"/"dir"
移动所有不需要解压的文件
find $SOURCE -type f -not -name '*.gz' | sed -e "s~^$SOURCE/~~" | xargs -r -I file cp "$SOURCE"/"file" "$DEST"/"file"
将所有压缩文件解压到目标目录
find $SOURCE -type f -name '*.gz' | sed -e "s~^$SOURCE~~" | sed -e "s~.gz$~~" | xargs -r -I file bash -c 'gzip -dc "'"$SOURCE"'"/"file".gz > "'"$DEST"'"/"file"'
也就是说,作为建议,我建议使用rsync -av
复制所有文件,然后find . -name '*.gz' -exec gunzip \{\} \;
在目标目录中解压缩文件。这是一种更简单的方法,潜在的陷阱也更少。 (上述三个步骤对我来说适用于一个小型测试目录,其中文件数量有限且文件名相对简单;YMMV 适用于更复杂的用例。)
答案2
tar
听起来像你想要的命令。
tar cf - <dir> | (cd <path-to-other-dir>; tar xf -)
当我想将目录的内容复制到另一个文件夹时通常使用它。