Cara mengganti nama file dalam direktori seperti file berikut:, PMC21375.pdf.txt
saya harus diganti namanya menjadi 21375.txt
. yaitu, saya harus menghapus keduanya PMC
dan pdf
dari setiap nama file.
Cara mengganti nama file dalam direktori seperti file berikut:, PMC21375.pdf.txt
saya harus diganti namanya menjadi 21375.txt
. yaitu, saya harus menghapus keduanya PMC
dan pdf
dari setiap nama file.
Jawaban:
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 shell
prompt. Ini sangat berguna, Anda dapat menempatkan beberapa kode perl seperti yang saya lakukan di substitusi.
Anda dapat melepas -n
(sakelar mode jalankan-kering) saat pengujian Anda menjadi valid.
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) Debian
dan turunannya seperti Ubuntu
:
$ sudo update-alternatives --set rename /path/to/rename
(ganti /path/to/rename
ke jalur perl's rename
perintah Anda .
Terakhir, alat ini awalnya ditulis oleh Larry Wall, ayah Perl.
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
.pdf
dari nama file.
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 *txt
diganti nama, di sini saya digunakan untuk membatasi penggantian ke file teks.
rename
seharusnya sudah ada jika Anda menjalankan Linux. Jika Anda menjalankan * BSD atau OS X, Anda mungkin harus menginstalnya terlebih dahulu.
rename
. Ada satu dari util-linux
, dan satu dari perl
dengan sintaks yang berbeda. Yang Anda maksudkan terlihat seperti yang dari util-linux
yang kadang-kadang disebut rename.ul
agar tidak menjadi bingung dengan rename
dari perl
, sementara pada beberapa sistem lain, rename
adalah yang dari util-linux dan yang dari perl
dipanggil prename
.
rename 's/PMC// *.txt
danrename s/\.pdf// *.txt
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 .pdf
dan lagi:
python -c "import glob,os; [os.rename(fn, fn.replace('PMC', '')) for fn in glob.glob('*')]"
untuk menghapus PMC
.
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 .pdf
di $i
dengan apa-apa. Begitu juga dengan tugas j kedua menyingkirkan PMC.
Jika Anda menggunakan zsh
, itu adalah pekerjaan khas untuk zmv
:
zmv 'PMC(*).pdf.txt' '$1.txt'
( zmv
menangani potensi konflik dengan anggun).
.pdf
dari nama file.