隠しディレクトリを除いて再帰的にコピー

隠しディレクトリを除いて再帰的にコピー

同じcp -rf *ですが、隠しディレクトリ( . で始まるディレクトリ)とその内容を除いて繰り返しコピーするにはどうすればよいですか。

答え1

特定のファイルを除いてディレクトリツリーをコピーするのに適したオプションは次のとおりです。

  • 同期:これは基本的にcpに多くの除外の可能性が加わったものです。

    rsync -a --exclude='.*' /source/ /destination
    
  • 公園:いくつかの除外があり、POSIXにあるので、どこでも使用できます(一部のLinuxディストリビューションでは、何らかの理由でデフォルトのインストールには含まれません)。

    cd /source && mkdir -p /destination && \
    pax -rw -pp -s '!.*/\..*!!'  . /destination
    

答え2

またはを使用cpできます。rsync--exclude=PATTERN

答え3

すべてをコピーできます。

cp -rf 

次に、ターゲットの隠しディレクトリを削除します。

find -type d -name '.*' -and -not -name '.' -print0 | xargs -0 rm -rf

あるいは、高度なtar(GNU tarなど)がある場合は、tarを使用して特定のパターンを除外できます。ただし、隠しディレクトリだけを除いて隠しファイルを含めることはできません。

たとえば、次のようになります。

tar --exclude=PATTERN -f - -c * | tar -C destination -f - -x

ところで、GNU tarにはさまざまな除外スタイルオプションがあります。私が一番好きなのは

--exclude-vcs

関連情報