/ mntにいくつかのサブフォルダーがマウントされています。 1つは/ mnt/dataで、もう1つは/ mnt/1804iso。 / dataには、別のディスクからマウントされたデータフォルダーとファイルが含まれ、/ 1804isoマウントされたISOファイルが含まれます。その内容は、マウントされたフラッシュドライブであるフォルダー/ media/benny/0EB4-95E2 /にコピーしたいものです。
それで、私はbashを開き、Sudo cp -Rn /mnt/1804iso/.* /media/benny/0EB4-95E2/
と入力しました。私は通常、ワイルドカードアスタリスクの前のピリオド/ * /を省略していましたが、その場合、ISO内の隠しファイルはコピーされません。したがって、このコマンドを使用すると、奇妙なことが1つ発生しました。 ISOファイルを正しくコピーした後、/ mnt/dataフォルダーとファイルもコピーし始めました。コマンドパート/mnt/1804iso/.*
に対する私の理解に完全に欠陥がない限り、そのフォルダへの参照がないため、なぜそれが起こり得るのかわかりません。
/mnt/data
フォルダがコピー用に含まれている理由を誰かが親切に説明してくれませんか?
.*
は、隠しファイル、.
、..
に展開されます。これは、Bash ファイル名展開 の動作の不運な部分です。..
というディレクトリエントリがあり、最初の.
と、その後に続く任意の数の文字で構成されています。 .*
と一致して含まれています。
これを実行すると、次のように表示されます。
echo /mnt/1804iso/.*
/mnt/1804iso/.
と/mnt/1804iso/..
が残りとともにリストされます。
../data
はdata
ディレクトリです。次のような宛先のディレクトリ構造になります。
.hidden
xyz
data/
data/...
1804iso/.hidden
1804iso/xyz
...
つまり、実際には、コピーしたいすべての2つのコピーに加えて、コピーしなかったすべてのものになります。 cp -Rnv
を使用すると、コピー先とコピー先が表示されます。
他のいくつかのシェルはこれについてより良いでしょう。 zshでは、それはあなたが望むものに近づいたでしょう:only隠しファイルがコピーされたでしょう。 Bashでは、cp src/.[^.]* dest
を使用してmostをzshの動作と一致させ、2つのソースの場所をリストできます。あるいは、 -shopt -s dotglob
を事前に実行する を実行することもできます。その後、src/*
はincludeドットファイルに展開されますが、exclude.
および..
エントリ(ただし、これは後で意図しないことを行う可能性があるため、注意してください)。
あなたが実際にやりたかったことについては、代わりに rsync を使用することをお勧めします:
rsync -avx /mnt/1804iso/ /media/benny/0EB4-95E2/
これにより、隠しファイルを含め、1804iso
ディレクトリのcontentsが宛先(最後のスラッシュに注意!)にコピーされます。
パターン/mnt/1804iso/.*
は、とりわけ、/mnt/1804iso/..
と同じディレクトリエントリ/mnt
に拡張されます。それが/mnt/data
のコピーを開始した理由です。
この場合、rsync
を使用します。
rsync -ai /mnt/1804iso/ /media/benny/0EB4-95E2
これにより、隠しファイルを含むすべての/mnt/1804iso
が/media/benny/0EB4-95E2
にコピーされます。ソースディレクトリの末尾の/
を省略すると、ターゲットディレクトリの下に1804iso
ディレクトリが作成されます。
または、dotglob
のbash
シェルオプションをshopt -s dotglob
で有効にして、*
が非表示の名前だけでなく非表示の名前にも一致するようにします(ただし.
はできません)または..
)。次に使用します
cp -Rn /mnt/1804iso/* /media/benny/0EB4-95E2/