Linux ディレクトリとサブディレクトリ構造をファイルなしで作成する方法

Linux ディレクトリとサブディレクトリ構造をファイルなしで作成する方法

以下のように、既存の Linux ディレクトリとフォルダーのサブディレクトリのミラー イメージを作成する必要があります。

「/opt/current」ディレクトリには、20 個のサブディレクトリの別のレイヤーと、50 個のサブディレクトリのさらに別のレイヤーがあり、さらにサブディレクトリのより深いレイヤーがいくつかあり、親から子まで合計 1000 個のディレクトリがあります。/opt/current は、Oracle ZFS アプライアンスにマウントされています。

1 対 1 のディレクトリのように手動で作成するのではなく、新しい場所 /opt/New に正確なミラー ディレクトリ/サブディレクトリ構造を作成し、権限を適用する方法。/opt/New は別の ZFS アプライアンスにマウントされます。

/opt/New パスに /opt/current パスと同じ所有者/グループ/その他の権限を持つ親から子までのディレクトリ構造全体を作成する方法/スクリプトはありますか?

ありがとう、CG

答え1

rsync -av --include='*/' --exclude='*' /opt/current/ /opt/New

これにより、ファイルのコピーを回避しながら、のrsyncディレクトリ構造を正確に複製することができます。/opt/local/opt/New

オプション-a( --archive) は、すべての権限などが保持されることを確認します (このオプションは再帰コピーも意味します)。また、-v( --verbose) は、コマンドの進行状況を示します。

では、--include='*/'明示的に任意のディレクトリを転送に含めますが、 ではその他すべてを除外します--exclude='*'。コマンドラインでのこれらのオプションの順序は重要です。

/の末尾のも重要です。これがないと、直接書き込むのではなく、/opt/current/作成することになります。/opt/New/current/opt/New

答え2

POSIX では、ディレクトリ名に改行文字が含まれず、$srcdirおよびが$dstdir絶対パスであると仮定します。

(cd -P "$srcdir" && find . -type d | pax -rwdpe "$dstdir/")

一部の実装では、NUL を含むファイル名を許可するオプションpaxを使用して、コピーするファイルの NUL 区切りリストの取得をサポートしています。-0

(cd -P "$srcdir" && find . -type d -print0 | pax -0rwdpe "$dstdir/")

(-print0これも非 POSIX 拡張です)。

答え3

代わりにrsync

find /opt/current -type d -print0 | cpio -0pma backup/dir/

答え4

次のようなスクリプトを作成して、それをファイルに保存します。

-- bash スクリプト/ksh スクリプトの構文はシェルに応じて変更する必要があります ----

find . -name "*"|while read line
do
        if [[ -d ${line} ]]
        then 
                echo ${line}
        fi
do

ファイルを作成しているサーバー上で

cat file |while read line
do
mkdir ${line}
done

関連情報