回答:
一般にダースを移動するのが私のお気に入りは:
tar cvf - . | (cd /dest/dir; tar xvf -)
現在のディレクトリをstdoutにtarし、stdinをuntarする前に宛先ディレクトリに最初にcdするサブシェルにパイプします。シンプル、直接、拡張可能-()を別のマシンのsshに置き換えるとどうなるかを検討してください。またはあなたの質問に答えるためにあなたがするかもしれません:
tar cvf - .* --exclude=\. --exclude=\.\. | (cd /dest/dir; tar xvf -)
cd /dest/dir && tar xvf -
ます。&&
あなたが先にタイプミスがある場合は、ソースディレクトリ上blattingからあなたを停止します。2)v
tarコマンドの1つでのみtar フラグが必要です(またはどちらでもありません)。
(cd /src/dir && tar cf - .) | tar xvf -
これはほぼすべての場合に解決できます:
cp -R .[a-zA-Z0-9]* directory
これらの文字のいずれかで始まらない隠しファイルがあることはかなり珍しいことです。
他のパターンマッチも利用可能(.??*
、.[^.]*
)-コメントを参照
使用できますrsync
。
rsync -a ./ /some/other/directory/
現在のディレクトリの内容をコピーします(ドットファイルを含むが、含まない..
)
.git
ディレクトリ間でコピーしないようにする必要がありました。-Cを追加するとこれが行われるため、コマンドは次のようになりますrsync -aC ./ /some/other/directory/
私は歩上のプレーンなシェル拡張から、あなたを懇願するcp
シェル拡張は、あらゆる種類の持っている-コマンドラインエヘン「おもしろい」コーナーケースによって引き起こされる(不要な再帰をして..スペース、非印刷可能なもの、ハードリンク、シンボリックリンク、と。など)。find
代わりに使用します(findutils
インストールしていない場合にパッケージに付属しています-奇妙なことに、すべてのディストリビューションがデフォルトでインストールします):
find -H /path/to/toplevel/dir/ -maxdepth 1 -name '.*' -a \( -type d -o -type f -o -type l \) -exec cp -a '{}' /path/to/destination/dir/ \;
ステップごとの説明:
-H
原因となるfind
シンボリックリンクに従うことではない(あなたがそれを与えた実際のトップレベルのディレクトリ名がシンボリックリンクがある場合を除いて、それが続くこと)/path/to/toplevel/dir/
明らかに、バックアップしたい設定ファイルとディレクトリをホストするディレクトリのパスであなたに置き換えられることになっています。-maxdepth 1
find
名前がドットで始まるディレクトリへの再帰的な下降を停止します。再帰する必要はありません。cp
そうするために、このレベルの名前が必要です。-name '.*'
伝えfind
我々は、ドットで始まるすべての名前を望んでいること。環境変数POSIXLY_CORRECT
が設定されている場合、これは正しく動作しませんが、まれにしか動作しません。これは、これまでに指定した最初の一致条件です。a \( ....... \)
さとカッコ内のより複雑な条件に続いて(私が使用した.....それを置き換えるために、それのは、以下に説明する。)彼らはそうでない場合は、シェルによって解釈(MIS)になるだろうので、私たちは、括弧をエスケープする必要があり、したがって、それらの前のバックスラッシュ、-type d -o -type f -o -type l
3つの条件であるか、それらの間で。-type d
ディレクトリに-type f
一致し、通常のファイルに-type l
一致し、シンボリックリンクに一致します。必要なものを選択することができます-たとえば、設定ディレクトリをバックアップしたくない場合は、省略します-type d
(そして、その-o
すぐ後ろは明らかに)。-exec ..... \;
伝えfind
コマンドに一致が検出されるたびに実行します。コマンドの終わりはセミコロンでマークされていますが、これもシェルの解釈を避けるためにバックスラッシュでエスケープする必要があります。そのコマンドライン内{}
で、現在検出されている一致の名前を最終的に使用する場所を使用する必要があります。シェルも中括弧を誤って解釈する可能性があるため、のようにアポストロフィで囲む必要があります'{}'
。この場合に実行するコマンドはcp -a '{}' /path/to/destination/dir/
次のとおりです(-サブディレクトリで再帰し、シンボリックリンクをリンクとしてコピーし、権限と拡張属性を保持し、/path/to/destination/dir/
明らかに宛先ディレクトリの名前であるアーカイブを置き換えます-を意味します)。
したがって、わかりやすい英語では、このfind
コマンドラインは次のように言います。
/ path / to / toplevel / dir /から開始します。サブディレクトリに降りないでください。名前がドットで始まるすべてのディレクトリ、ファイル、およびシンボリックリンクを検索します。見つかったものごとに、性質、許可、および拡張属性を保持しながら、/ path / to / destination / dir /にコピーします。
ここでより良い答え。 /superuser/61611/how-to-copy-with-cp-to-include-hidden-files-and-hidden-directories-and-their-con
たとえば、ネイティブbashソリューションにshoptを使用する方法について説明します
-r
あり-R
ますか?