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.

kylejudita
sumber

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.

Gilles Quenot
sumber
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
hmontoliu
sumber
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.

wingedsubmariner
sumber
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.

xaratustra
sumber
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.

William Everett
sumber
0

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

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

( zmvmenangani potensi konflik dengan anggun).

Stéphane Chazelas
sumber