Saya mengalami musibah datang dari latar belakang MS-DOS - tetapi setidaknya itu membuat saya menghargai betapa jauh lebih kuatnya Linux. Saya telah berusaha untuk mendapatkan Linux-Fu secara normal, tetapi ada beberapa hal yang dapat dilakukan dengan DOS yang saya tidak yakin bagaimana melakukannya dengan paling mudah dengan Linux:
Mengganti Nama Banyak File - Menggunakan Dua Wildcard
c:\> dir
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
c:\>rename *.txt *.bak
c:\> dir
Directory of c:\
file1.bak
file2.bak
file3.bak
file4.bak
Saya tahu saya bisa menggunakan di find -exec
sini tetapi apakah mungkin untuk menggunakan sintaks yang lebih pendek - mungkin mv
dengan beberapa flag khusus atau sintaks? Saya kira kunci untuk ini adalah wildcard kedua *
karena linux seharusnya tidak memiliki masalah dengan yang pertama (yaitu saya tahu cara memilih file yang ingin saya ganti namanya menggunakan wildcard)
Mengganti Nama File Tunggal - Menggunakan Satu Wildcard
c:\> dir
Directory of c:\
file1.txt
c:\>rename file1.txt *.bak
c:\> dir
Directory of c:\
file1.bak
Ini akan sangat membantu ketika mengganti nama nama file yang panjang dan sulit. Saya pikir mungkin saya bisa menggunakan mv file1.txt $1.bak
untuk berakhir dengan file1.txt.bak
yang juga dapat diterima tetapi saya tidak yakin Anda dapat referensi $1
inline parameter dengan perintah shell. Sekali lagi dalam kasus khusus ini hanya nyaman bagaimana ms-dos memastar *
wildcard untuk digunakan sebagai semacam pencocokan penangkapan / penggantian untuk bagian dari nama file.
Memfilter Daftar Direktori dengan Wildcard
c:\> dir
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
text.txt
\temp (directory)
c:\> dir file*
Directory of c:\
file1.txt
file2.txt
file3.txt
file4.txt
c:\> t*
Directory of c:\
text.txt
\temp (directory)
Saya tidak yakin apa sintaks yang tepat untuk melakukan itu ls
, atau apakah itu mungkin. Jika saya melakukan sesuatu seperti ls t*
itu akan muncul kembali ke direktori dimulai dengan t
. Solusi saya telah menggunakan find . --max-depth 1 -iname "t*"
atau sesuatu seperti ls -al | grep t
- tidak ada yang sesingkat dan sesederhana dir t*
itu.
Akhirnya, saya tahu saya dapat mengatur alias untuk membuat perintah-perintah panjang ini lebih pendek, tetapi saya ingin mempelajari beberapa linux-fu out-of-the-box untuk melakukan hal-hal ini karena kadang-kadang Anda terhubung ke sistem jarak jauh atau bekerja pada mesin baru.
Jadi bagaimana saya bisa mv
dan ls
file dengan cara yang sama seperti yang saya gunakan dir
dan rename
file?
sumber
somefunc *.Ext
jika pola itu tidak cocok dengan file apa pun, dan mainkan dengan mengutip untuk melihat apakah Anda berhasil meneruskan pola di sekitar ( tanpa harus diperluas) antar fungsi. Tip keamanan: jangan digunakan dirm
mana pun saat bereksperimen dengan ekspansi globbing / shell :-)Satu hal yang perlu diingat ketika datang ke wildcard adalah bahwa mereka diperluas oleh shell. Aplikasi tidak tahu apakah Anda menggunakan wildcard atau mengetikkan nama. Misalnya, jika Anda mengetik
rename *.txt *.bak
, makarename
perintah melihat sesuatu sepertirename file1.txt file2.txt existingfile.bak
. Tidak cukup informasi untuk melanjutkan.Saya akan menangani pertanyaan tentang
ls
pertama, karena lebih sederhana. Jika semua yang Anda inginkan adalah nama yang cocok, maka Anda tidak perluls
, karena shell sudah melakukan ekspansi.Jika Anda ingin informasi lebih lanjut tentang file, maka lewat
-d
opsi kels
, untuk mengatakannya untuk tidak mencantumkan isi direktori.Tidak ada utilitas standar untuk mengganti nama file, karena sistem unix pertama tidak datang dengan satu. Metode portabel untuk mengubah nama file menggunakan loop dan sedikit verbose:
Ada beberapa utilitas umum untuk mengubah nama file, tidak ada yang dijamin untuk diinstal pada sistem unix yang diberikan, tetapi semuanya mudah untuk diinstal. Inilah yang utama:
rename
dariutil-linux
suite, tersedia di setiap sistem Linux yang tidak tertanam (dan tempat lain). Pada Debian dan turunannya (termasuk Ubuntu), perintah ini disebutrename.ul
. Asalkan tidak ada kejadian.txt
selain ekstensi akhir, Anda dapat menulisrename
adalah skrip Perl yang dikirimkan oleh Debian dan turunannya/usr/bin/rename
. Anda dapat mengganti nama file sesuai dengan perintah Perl sewenang-wenang.mmv
, yang dapat mengubah nama, menyalin, dan menautkan file sesuai dengan beberapa pola berbasis nama dan memiliki banyak opsi yang berkaitan dengan apa yang terjadi jika nama target sudah ada. Perhatikan bahwa Anda harus menggunakan tanda kutip untuk melindungi wildcard dari ekspansi oleh shell.zmv
adalah fungsi zsh , tersedia jika dan hanya jika shell Anda adalah zsh. Itu bisa cocok dengan pola zsh sewenang-wenang (sehingga Anda dapat mencocokkan nama file sesuai dengan ekspresi reguler sewenang-wenang, bukan hanya wildcard, dan Anda dapat mencocokkan file dengan kriteria lain seperti tanggal dan ukuran).zmv
juga dapat menyalin dan menautkan.Jika Anda memiliki kontrol atas mesin yang Anda gunakan, rekomendasi saya adalah menggunakan zsh sebagai shell Anda (memiliki manfaat lain daripada bash) dan letakkan baris ini di
~/.zshrc
:noglob
adalah fitur zsh yang memberi tahu shell untuk tidak memperluas wildcard dalam argumen perintah. Dengan cara ini Anda dapat menuliszmv *.txt \$1.txt
(Anda harus selalu melindungi$
dalam teks pengganti).sumber