Ganti nama file dalam direktori


10

Cara mengganti nama file dalam direktori seperti file berikut:, PMC21375.pdf.txtsaya harus diganti namanya menjadi 21375.txt. yaitu, saya harus menghapus keduanya PMCdan pdfdari setiap nama file.

Jawaban:


9

Dengan 's rename:

rename 's/(PMC|\.pdf)//g' *pdf.txt 

Demo:

$ ls *txt
PMC21375.pdf.txt
$ rename -n 's/(PMC|\.pdf)//g' *txt 
PMC21375.pdf.txt -> 21375.txt

dari shellprompt. Ini sangat berguna, Anda dapat menempatkan beberapa kode seperti yang saya lakukan di substitusi.

Anda dapat melepas -n(sakelar mode jalankan-kering) saat pengujian Anda menjadi valid.

peringatan Ada alat lain dengan nama yang sama yang mungkin atau mungkin tidak dapat melakukan ini, jadi berhati-hatilah.

Jika Anda menjalankan perintah berikut ( linux)

$ file $(readlink -f $(type -p rename))

dan Anda memiliki hasil seperti

.../rename: Perl script, ASCII text executable

maka ini tampaknya menjadi alat yang tepat =)

Jika tidak, untuk menjadikannya default (biasanya sudah terjadi) Debiandan turunannya seperti Ubuntu:

$ sudo update-alternatives --set rename /path/to/rename

(ganti /path/to/renameke jalur perl's renameperintah Anda .


Terakhir, alat ini awalnya ditulis oleh Larry Wall, ayah Perl.


Ini tidak akan menghapus .pdfdari nama file.
William Everett

Pos diedit sesuai.
Gilles Quenot

5

Selain perintah ganti nama, Anda dapat melakukannya langsung di bash (hanya satu cara dari banyak):

 for file in *pdf.txt; do mv $file ${file//[A-Z.]}.txt ; done

Diedit untuk menunjukkan kepada Pinyaka cara kerjanya:

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

Ini tidak akan menghapus .pdfdari nama file.
William Everett

Sudahkah Anda mencobanya? karena bagi saya itu. Ditampilkan dalam hasil edit.
hmontoliu

Salahku. Saya pikir itu hanya akan mengubah huruf kapital. Terpilih.
William Everett

4

Ada beberapa utilitas untuk mengganti nama file, tetapi salah satu yang paling mudah digunakan adalah rename. Dalam kasus Anda, Anda mungkin dapat melakukan:

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

Parameter pertama adalah bagian dari nama file yang akan diganti. Parameter kedua adalah string pengganti. Di sini saya menggunakan ''untuk mewakili string kosong. Semua parameter berikut adalah file yang akan *txtdiganti nama, di sini saya digunakan untuk membatasi penggantian ke file teks.

renameseharusnya sudah ada jika Anda menjalankan Linux. Jika Anda menjalankan * BSD atau OS X, Anda mungkin harus menginstalnya terlebih dahulu.


Saya tidak berpikir ada GNU rename. Ada satu dari util-linux, dan satu dari perldengan sintaks yang berbeda. Yang Anda maksudkan terlihat seperti yang dari util-linuxyang kadang-kadang disebut rename.ulagar tidak menjadi bingung dengan renamedari perl, sementara pada beberapa sistem lain, renameadalah yang dari util-linux dan yang dari perldipanggil prename.
Stéphane Chazelas

1
Milik saya adalah dari util-linux. Saya keliru mengira itu adalah bagian dari GNU coreutils.
wingedsubmariner

Ganti nama versi Debian standar akan menjadi seperti ini rename 's/PMC// *.txtdanrename s/\.pdf// *.txt
William Everett

1

Pertama buat cadangan file Anda! Maka pada dasarnya Anda dapat menggunakan python one-liner di direktori saat ini dengan bentuk umum:

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

dalam kasus spesifik Anda, Anda dapat menggunakan ini dua kali:

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

untuk menghapus .pdfdan lagi:

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

untuk menghapus PMC.


0

Coba ini:

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

The j=${i//\.pdf/}sarana untuk menggantikan .pdfdi $idengan apa-apa. Begitu juga dengan tugas j kedua menyingkirkan PMC.


0

Jika Anda menggunakan zsh, itu adalah pekerjaan khas untuk zmv:

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

( zmvmenangani potensi konflik dengan anggun).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.