複数のサブフォルダをインストールしました/mnt。一つは/mnt/データ、もう一つ/mnt/1804iso。これ/データ別のディスクからインストールされたデータフォルダとファイルが含まれています。/1804isoフォルダにコピーするコンテンツを含むマウントされたISOファイルが含まれています。/メディア/ベニー/0EB4-95E2/これはマウントされたフラッシュドライブです。
だから開いた。強く打つそして入力sudo cp -Rn /mnt/1804iso/.* /media/benny/0EB4-95E2/
。私は通常ワイルドカードアスタリスクの前のピリオドを省略します。/*/しかし、これはISOの隠しファイルをコピーしません。したがって、このコマンドを使用すると奇妙なことが起こります。 ISOファイルが正しくコピーされると、コピーが開始されます。/mnt/データフォルダやファイルも同様です。コマンド部分の理解が/mnt/1804iso/.*
完全に欠陥がない限り、フォルダが参照されないため、なぜこれが起こるのか理解できません。
自分の/mnt/data
フォルダがコピーに含まれている理由を誰か説明できますか?
答え1
.*
隠されたファイルに拡張され、.
これは..
Bashの不幸な部分です。ファイル名拡張子有効:最初の文字と任意の数の文字で構成され、一致し、..
含まれる名前のディレクトリエントリがあります。.
.*
たとえば、次のように実行すると、このような状況が発生することがわかります。
echo /mnt/1804iso/.*
残りの部分と一緒に一覧表示され/mnt/1804iso/.
ます/mnt/1804iso/..
。
../data
あなたのディレクトリですdata
。ターゲットでは、次のディレクトリ構造が作成されます。
.hidden
xyz
data/
data/...
1804iso/.hidden
1804iso/xyz
...
つまり、実際には二つコピーしたいすべてのもののコピーとコピーしたくないすべてのもののコピー。を使用すると、cp -Rnv
何をコピーしているのか、どこにコピーしているのかを確認できます。
これを行うには、他のシェルがより良いです。 zshでは、欲しいものに近いです。ただ隠しファイルがコピーされます。 Bashでは、次のcp src/.[^.]* dest
ものを使用できます。ほぼzsh の動作を一致させ、両方のソース位置をリストします。またはできますshopt -s dotglob
事前に走ってください、src/*
次に展開します。含むファイルをクリックしますが入らないようにする.
と項目..
(ただし、後でやりたくないことをすることがありますのでご注意ください)。
あなたが本当にやりたいことをするには、次のものを使用することをお勧めします。同期代わりに:
rsync -avx /mnt/1804iso/ /media/benny/0EB4-95E2/
コピーされますコンテンツ1804iso
隠しファイルを含むターゲットディレクトリ(最後のスラッシュに注意してください!)に移動します。
答え2
パターンは/mnt/1804iso/.*
ディレクトリエントリに展開できます/mnt/1804iso/..
。/mnt
それのために複製が始まったようです/mnt/data
。
この場合は、以下を使用してくださいrsync
。
rsync -ai /mnt/1804iso/ /media/benny/0EB4-95E2
これにより、/mnt/1804iso
隠しファイルを含むすべての項目が元のディレクトリにコピーされます/media/benny/0EB4-95E2
。/
ソースディレクトリの末尾を省略すると、ターゲットディレクトリの下にディレクトリが作成されます1804iso
。
またはdotglob
、隠された名前と隠されていない名前の両方を一致させるには、withでシェルオプションを有効にします(ただし、または除く)。その後、使用bash
shopt -s dotglob
*
.
..
cp -Rn /mnt/1804iso/* /media/benny/0EB4-95E2/