将目录树复制到另一个位置,并可选择压缩

将目录树复制到另一个位置,并可选择压缩

我想要做的是将一个目录复制到另一个位置(在 Linux 上),并在目标位置使用 GZip 压缩一些文件(具有特定扩展名),而其他文件则直接复制。这可以通过一行代码高效地实现吗?需要复制大量文件,因此效率越高越好。

答案1

好吧,作为一项学术练习:

set -e # abort on errors
find /source -print | while read object_name; do
  if [ -d "$object_name" ]; then
    mkdir -p /destination/$object_name
  else
    if echo "$object_name" | egrep "(txt|html|...)" >/dev/null # extensions you want to compress
      cat $object_name | gzip >/destination/${object_name}.gz
    else
      cp $object_name /destination/$object_name
    fi
  fi
  rm /source/$object_name # could comment this out to preserve the source if you have the space
done

相关内容