次のファイルのようなディレクトリのファイル名をどのように変更しますか?PMC21375.pdf.txt
、に名前を変更する必要があります 21375.txt
。つまり、各ファイル名からおよびを削除する必要がありますPMC
。pdf
答え1
rename 's/(PMC|\.pdf)//g' *pdf.txt
デモ:
$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt
PMC21375.pdf.txt -> 21375.txt
shell
プロンプトで。とても便利です。一部を入れることができます。真珠私が交換したコードと同じです。テストが有効な場合は
削除できます(模擬実行モードスイッチ)。-n
これを行うこともできないかもしれない同じ名前の他のツールがあるので注意してください。
次のコマンドを実行すると(linux
)
$ file $(readlink -f $(type -p rename))
この結果が出ました。
.../rename: Perl script, ASCII text executable
もしそうなら、これは正しいツールのようです=)
そうでない場合は、それをデフォルト値に設定し(通常はすでに適用されている)、Debian
次のように派生しますUbuntu
。
$ sudo update-alternatives --set rename /path/to/rename
(コマンドのパスに置き換えます/path/to/rename
。perl's rename
最後に、このツールはもともとPerlの父親であるLarry Wallによって書かれました。
答え2
コマンドの名前を変更する代わりに、bashで直接実行できます(いくつかの方法の1つ)。
for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
Pinyakaにこれがどのように機能するかを示すために編集します。
hmontoliu@ulises2:/tmp/foo$ touch PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ ls
PCM21375.pdf.txt PCM21376.pdf.txt
hmontoliu@ulises2:/tmp/foo$ for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done
hmontoliu@ulises2:/tmp/foo$ ls
21375.txt 21376.txt
答え3
ファイル名を変更するさまざまなユーティリティがありますが、最も使いやすいユーティリティの1つはrename
次のとおりです。
rename PMC '' *txt
rename .pdf '' *txt
最初のパラメーターは、置き換えられるファイル名の一部です。 2番目のパラメータは代替文字列です。ここでは、''
空の文字列を表すためにこれを使用します。次のパラメータは、名前を変更するすべてのファイルです。ここでは*txt
、置換をテキストファイルに制限するために使用します。
rename
Linuxを実行している場合は、Linuxがすでにインストールされているはずです。 * BSDまたはOS Xを実行している場合は、最初にインストールする必要があります。
答え4
この試み:
for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done
手段は何も置き換えられませんj=${i//\.pdf/}
。同様に、2番目のj割り当てもPMCを削除します。.pdf
$i