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 mv
telepon adalah bahwa shell mengembang *.txt
ke file yang cocok. Karena tidak ada *.tsv
file yang tidak diubah.
The mv
perintah 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 mv
program 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 mv
perintah dijalankan dengan:
argc = 3
argv[0] = mv
argv[1] = file1.txt
argv[2] = *.tsv
Sekarang, sekali lagi, mv
periksa untuk melihat apakah *.tsv
ada. Karena tidak file file1.txt
dipindahkan ke *.tsv
. Yaitu: file diubah namanya menjadi *.tsv
asterisk 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 mv
perintah dijalankan dengan:
argc = 3
argv[0] = mv
argv[1] = file1.txt
argv[1] = file2.txt
argv[2] = *.tsv
Karena *.tsv
sekarang adalah direktori, file akhirnya dipindahkan ke sana.
Sekarang: menggunakan perintah seperti some_command *.tsv
ketika 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: mv
perintah 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_DIR
opsi, 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 mv
akan 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 mv
tidak disebutkan sama sekali, tetapi rename
. Jika Anda memiliki lebih banyak tautan, Anda dapat membagikannya. Juga untuk halaman manual di mana Anda mengklaim ini diungkapkan.