巨大なファイルツリーがあります。いくつかのファイルが同じ名前を持っていますが、別のケースでは、例えば、some_code.c
とSome_Code.c
。
そのため、NTFS / FATファイルシステムにコピーしようとすると、ファイルを置き換えるかスキップするかを尋ねられます。
たとえば、 (1)
競合ファイルの名前に追加することにより、このようなファイルの名前を自動的に変更する方法はありますか(Windows 7と同様)。
巨大なファイルツリーがあります。いくつかのファイルが同じ名前を持っていますが、別のケースでは、例えば、some_code.c
とSome_Code.c
。
そのため、NTFS / FATファイルシステムにコピーしようとすると、ファイルを置き換えるかスキップするかを尋ねられます。
たとえば、 (1)
競合ファイルの名前に追加することにより、このようなファイルの名前を自動的に変更する方法はありますか(Windows 7と同様)。
回答:
など、多くのGNUツールcp
、mv
およびtar
ターゲットが存在する場合、バックアップファイルの作成をサポート。つまり、にコピーfoo
するときにbar
、というファイルが既に存在する場合bar
、既存の ファイルのbar
名前が変更され、コピー後にbar
の内容が含まれますfoo
。デフォルトでbar
は、はに名前が変更されますbar~
が、動作を変更できます。
# If a file foo exists in the target, then…
cp -r --backup source target # rename foo → foo~
cp -r --backup=t source target # rename foo → foo.~1~ (or foo.~2~, etc)
番号付きバックアップが既に存在する場合にのみ番号付きバックアップを作成するなど、他のバリアントがあります。詳細については、coreutilsマニュアルを参照してください。
brew install coreutils
にコマンドを使用してから使用してくださいgcp
。
私は試した
apropos copy | grep "(1)"
候補を見つけるために、mcopyが表示されました。
man mcopy
有望なオプション-D clash-option
はそれほどクールではないことを示していますか?しかし、それほどクールではありません-それは説明されていません。しかし、私は成功せず、私のシステム上で検索mtools.dviにいくつかのヒントは、あります、とGoogleを経由して、成功せず、その後、グーグルで、私はのために直接検索mcopy clash-option
して、このサイトを見つけました。
短いテストをしました
mcopy -D A f* a
autorenameとtargetdirをテストするためにa
- 自動名前変更の代わりに、すべてのファイルを無視またはオーバーライドするように要求しました。
私のバージョンはmtools-4.0.10
、ヘルプページは1996年から15歳です。その間、いくつかの機能を本当に失うべきでしょうか?
作業を2つのステップに分割します。
find
、コピーするすべてのファイルに対してそのスクリプトを実行します。このアプローチを支援しませんか?:)
ファイルの自動名前変更を行うスクリプトを次に示します。
#!/bin/bash
name=$1
target=$2
autorename () {
name=$1
target=$2
no=$3
test -e ${target}/${name}.$no && autorename ${name} ${target} $((no+1)) || cp ${name} ${target}/${name}.$no
}
test -e ${target}/${name} && autorename ${name} ${target} 0 || cp ${name} ${target}
これは私のテスト呼び出しです:
find -maxdepth 1 -name "fo*" -type f -exec ./autorename.sh {} /mnt/hidden/test/a ";"
注:-maxdepth、-name、および-typeは、影響を受けるファイルの数を劇的に制限するために使用されます。深いファイル構造や、ファイル名の空白や、改行やページフィードなどのファンキーな文字については、スクリプトをテストしませんでした。
ほとんどのコマンドで問題が発生しないため、.1を使用しましたが、(およびa)は多くの場合マスキングが必要です。
cp
少なくともGNU ではそうではありません。
重複するファイル名(大文字と小文字を区別しない)を使用しないことを強くお勧めします。ファイル名は、単に苦痛の世界を引き起こします。を使用してそのような重複のリストを見つけます
find . | tr A-Z a-z | sort | uniq -d
次に、出力される場合、各行のファイルの1つを手動で名前変更します。将来的に重複を作成しないようにしてください。
sudo fdisk -l /dev/sda
)を作成しようとした場合にどのようなエラーが発生するかを確認したかっただけでtouch foo; touch Foo
、2つのファイルfoo
とで終了しましたFoo
。しかし、Windowsを再起動して、Windowsがどのように見えるかを知りたくありません。それはただのFATの問題ですか?ああ-FATを備えたUSB-Stickがあり、ファイル内にFATシステムを作成できます。:)