Saat Anda mengeluarkan perintah:
mv *.txt *.tsv
shell, mari kita asumsikan bash, perluas wildcard jika ada file yang cocok (termasuk direktori). Daftar file diteruskan ke program, di sini mv. Jika tidak ada kecocokan yang ditemukan, versi yang tidak dikembangkan dilewatkan.
Sekali lagi: shell memperluas polanya, bukan programnya.
Banyak contoh mungkin cara terbaik, jadi di sini kita mulai:
Contoh 1:
$ ls
file1.txt file2.txt
$ mv *.txt *.tsv
Sekarang yang terjadi di mvtelepon adalah bahwa shell mengembang *.txtke file yang cocok. Karena tidak ada *.tsvfile yang tidak diubah.
The mvperintah disebut dengan dua argumen istimewa :
argc: Jumlah argumen, termasuk program.
argv: Array argumen, termasuk program sebagai entri pertama.
Dalam contoh di atas itu akan menjadi:
argc = 4
argv[0] = mv
argv[1] = file1.txt
argv[2] = file2.txt
argv[3] = *.tsv
The mvprogram pemeriksaan untuk melihat apakah argumen terakhir, *.tsv, adalah sebuah direktori. Karena tidak, program tidak dapat melanjutkan karena tidak dirancang untuk menggabungkan file. (Biasanya memindahkan semua file menjadi satu.) Atau membuat direktori dengan hati-hati.
Akibatnya, ini membatalkan dan melaporkan kesalahan:
mv: target ‘*.tsv’ is not a directory
Contoh 2:
Sekarang jika Anda mengatakan:
$ mv *1.txt *.tsv
The mvperintah dijalankan dengan:
argc = 3
argv[0] = mv
argv[1] = file1.txt
argv[2] = *.tsv
Sekarang, sekali lagi, mvperiksa untuk melihat apakah *.tsvada. Karena tidak file file1.txtdipindahkan ke *.tsv. Yaitu: file diubah namanya menjadi *.tsvasterisk dan semuanya.
$ mv *1.txt *.tsv
‘file1.txt’ -> ‘*.tsv’
$ ls
file2.txt *.tsv
Contoh 3:
Jika Anda sebaliknya berkata:
$ mkdir *.tsv
$ mv *.txt *.tsv
The mvperintah dijalankan dengan:
argc = 3
argv[0] = mv
argv[1] = file1.txt
argv[1] = file2.txt
argv[2] = *.tsv
Karena *.tsvsekarang adalah direktori, file akhirnya dipindahkan ke sana.
Sekarang: menggunakan perintah seperti some_command *.tsvketika tujuannya adalah untuk benar-benar mempertahankan wildcard, orang harus selalu mengutipnya. Dengan mengutip Anda mencegah wildcard tidak diperluas jika harus ada kecocokan. Misalkan katakan mkdir "*.tsv".
Contoh 4:
Perluasan lebih lanjut dapat dilihat jika Anda lakukan misalnya:
$ ls
file1.txt file2.txt
$ mkdir *.txt
mkdir: cannot create directory ‘file1.txt’: File exists
mkdir: cannot create directory ‘file2.txt’: File exists
Contoh 5:
Sekarang: mvperintah dapat dan berfungsi pada banyak file. Tetapi jika ada lebih dari dua yang terakhir harus menjadi direktori target. (Secara opsional Anda dapat menggunakan -t TARGET_DIRopsi, setidaknya untuk GNU mv.)
Jadi ini tidak masalah:
$ ls -F
b1.tsv b2.tsv f1.txt f2.txt f3.txt foo/
$ mv *.txt *.tsv foo
Di sini mvakan dipanggil dengan:
argc = 7
argv[0] = mv
argv[1] = b1.tsv
argv[2] = b2.tsv
argv[3] = f1.txt
argv[4] = f2.txt
argv[5] = f3.txt
argv[6] = foo
dan semua file berakhir di direktori foo.
Adapun tautan Anda. Anda telah memberikan satu (dalam komentar), di mana mvtidak disebutkan sama sekali, tetapi rename. Jika Anda memiliki lebih banyak tautan, Anda dapat membagikannya. Juga untuk halaman manual di mana Anda mengklaim ini diungkapkan.