web-dev-qa-db-ja.com

USBドライブにコピーするとファイル名が変更されます

USBスティックにデータをコピーするbashスクリプトがあります。できます。データは正常にコピーされますが、ファイル名は常に変更されます。以前と同じですが、名前が8文字にカットされ、拡張子は3文字(最大合計11文字)になります。

したがって、「willGetCutShorter.html」という元のファイルはドライブ上で「willGetS.htm」になりますが、「small.txt」は同じままです。コピーされたディレクトリ名は同じ方法で切り取られ、すべて8文字の長さになります(もちろん、拡張子はありません)。

私はこれが起こらないようにしたい。ファイル名とディレクトリ名をまったく変更しないようにしたい。なぜこれが起こっているのかもわかりません。

Bashスクリプトでは、アスタリスクを使用してコンピューターディレクトリ内のすべてのものをドライブにコピーし、すべてのコンピューターディレクトリの内容を表します。これが理由なのかしら?おそらく、cpはファイル名の一部しか取得していませんか?

また、Linuxでは、ファイルはすべて小文字で表示されますが、元々大文字であったものも含まれます。ただし、Windowsでは、すべてのファイルとフォルダーが大文字になります。

どうして?

編集#1

この方法で使用を開始する前に、Windows7マシンでUSBドライブをフォーマットしました。私の/etc/fstabファイルmsdosとしてマウントするドライブのエントリを追加しました。これは、マニュアルページ(おそらく「manmount」)を読んだところ、ドライブ形式であるFAT32がmsdosでカバーされていると書かれていたためです。

ファイルシステムタイプとしてFAT32を使用してマウントしたかったのですが、マウントのマニュアルページにそのオプションが表示されませんでした。 fstabエントリは、mountコマンドがこれのみで構成されていることを意味します。

Sudo mount /mnt/

Bashスクリプトのコピーコマンドはすべて次のようになります。

cp -f -r /path/to/dir/* /mnt/to/dir/

ドライブを別のものに再フォーマットする必要があるように聞こえますか、それとも少し異なる方法でマウントしますか?

1
user179130

以下のようなマウントコマンドを使用していると思われます。

      mount -t msdos /dev/XYZ /mnt/test

これにより、長いファイル名を使用するvfatの代わりに、8.3ファイル名規則( https://en.wikipedia.org/wiki/8.3_filename を参照)を使用するレガシーDOSFATファイルシステムにパーティションが強制的にマウントされます。 ( https://en.wikipedia.org/wiki/Long_filename )。

マウントには、以下のオプションのいずれかを使用することをお勧めします。

      mount /dev/XYZ /mnt/test     (by default uses vfat, if it is FATXX formatted USB stick)

または

      mount -t vfat /dev/XYZ /mnt/test  (explicitly mount as vfat, if it is FATXX formatted USB stick)
9
PramodK

それはおそらくusb-storage上のファイルシステムです。 FATファイルシステムは、8 +3文字のファイル名のみをサポートできます。このファイルシステムは非常に古いものです。これは、非常に古いシステムとの下位互換性のためにのみ必要です。

FATは大文字のみをサポートします。これは1つのケースにすぎないため、これを小文字にマップするオプションがあります。これは物事をより便利にします。大文字を入力する必要がないため、ディレクトリリストは派手に見えません。

FAT32、ntfs、ext4、その他の使用を検討してください。

6
ctrl-alt-delor