ディレクトリ内のファイルの名前を変更する


10

次のようなディレクトリにあるファイルの名前を変更する方法:PMC21375.pdf.txt、に名前を変更する必要があります 21375.txt。つまり、両方PMCpdf各ファイル名から削除する必要があります。

回答:


9

さんrename

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によって書かれました。


これ.pdfにより、ファイル名からが削除されることはありません。
ウィリアムエバレット

それに応じて編集された投稿。
Gilles Quenot 2013年

5

renameコマンドのほかに、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

これは.pdfファイル名から削除されません。
William Everett

試しましたか?私にとってはそうです。編集で表示されます。
hmontoliu 2013年

私の悪い。大文字に変換するだけだと思いました。賛成。
ウィリアム・エヴェレット

4

ファイルの名前を変更するためのユーティリティがいくつかありますが、最も使いやすいのはrenameです。あなたの場合、あなたはおそらく行うことができます:

rename PMC '' *txt
rename .pdf '' *txt

最初のパラメータは、置換するファイル名の一部です。2番目のパラメーターは、置換文字列です。ここでは''、空の文字列を表すために使用しています。以下のすべてのパラメーターは名前を変更する*txtファイルです。ここでは、置換をテキストファイルに制限するために使用しました。

renameLinuxを実行している場合は、すでに存在しているはずです。* BSDまたはOS Xを実行している場合は、最初にインストールする必要がある場合があります。


GNUが存在することはありませんrename。からのものとutil-linuxperl構文が異なるものがあります。あなたが参照しているものは、from と混同しないようにutil-linux時々呼び出されるもののように見えますが、他のシステムではutil-linuxからのもので、from が呼び出されます。rename.ulrenameperlrenameperlprename
ステファンChazelas

1
鉱山はutil-linuxからのものです。私はそれがGNU coreutilsの一部であると誤って考えました。
wingedsubmariner 2013年

名前変更のデフォルトのDebianのバージョンは、このようなものになるだろうrename 's/PMC// *.txtrename s/\.pdf// *.txt
ウィリアム・エヴェレット

1

最初にファイルのバックアップを作成してください!次に、基本的に現在のディレクトリで一般的な形式のpythonワンライナーを使用できます。

python -c "import glob,os; [os.rename(fn, fn.replace('PATTERN', 'REPLACE')) for fn in glob.glob('PATH/*')]"

特定のケースでは、これを2回使用できます。

python -c "import glob,os; [os.rename(fn, fn.replace('.pdf', '')) for fn in glob.glob('*')]"

削除.pdfしてもう一度:

python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"

削除するPMC


0

これを試して:

for i in *.pdf.txt; do j=${i//\.pdf/}; j=${j//PMC/}; mv $i $j; done

j=${i//\.pdf/}置換する手段.pdf$i何もありません。同様に、2番目のj割り当てがPMCを取り除きます。


0

を使用している場合、これは次の場合のzsh一般的な作業ですzmv

zmv 'PMC(*).pdf.txt' '$1.txt'

zmv潜在的な競合を適切に処理します)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.