Bentuk pendek mungkin terkait shell, sedangkan sentuhan adalah perintah mandiri. Oleh karena itu formulir singkat tergantung pada shell yang Anda gunakan (dan orang-orang memang memiliki preferensi kuat di bidang ini) karena mungkin tidak semuanya menyediakan jalan pintas. touchmenjadi mandiri akan bekerja dengan cara yang sama apa pun yang harus Anda gunakan.
Contoh pertama harus diedit : >> fileatau bahkan >> file, sehingga mereka memiliki efek yang sama, yaitu TIDAK merusak konten file.
user000001
2
touchterutama memperbarui mtime. Itu tidak mengosongkan file yang ada tidak seperti >.
rexkogitans
2
Tidak ada perintah "membuat file kosong"; mereka hanya memiliki hasil ini jika file tersebut belum ada. Untuk menjamin file kosong, Anda perlu > file.
alexis
Jawaban:
47
Anda bahkan tidak perlu menggunakan :; Anda bisa > file(setidaknya di bash; shell lain mungkin berperilaku berbeda).
Dalam istilah praktis, tidak ada perbedaan nyata di sini (meskipun overhead dari memanggil /bin/touchadalah sesuatu).
touchNamun, juga dapat digunakan untuk memodifikasi cap waktu pada file yang sudah ada tanpa mengubah atau menghapus konten; selanjutnya, > fileakan meniup apa saja fileyang sudah ada. Ini bisa diselesaikan dengan menggunakan >> file.
Satu perbedaan lainnya touchadalah Anda dapat membuatnya (atau memperbarui cap waktu) beberapa file sekaligus (misalnya touch foo bar baz quux) dengan sintaksis yang lebih ringkas daripada dengan pengalihan, di mana setiap file memerlukan pengalihan sendiri (mis >foo >bar >baz >quux.).
Menggunakan touch:
$ touch foo; stat -x foo; sleep 2; touch foo; stat -x foo
File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:192018Modify:FriMay2510:55:192018Change:FriMay2510:55:192018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:55:212018Change:FriMay2510:55:212018
Menggunakan pengalihan:
$ > foo; stat -x foo; sleep 2;>> foo; stat -x foo
File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018File:"foo"Size:0FileType:RegularFileMode:(0644/-rw-r--r--)Uid:(991148597/redacted)Gid:(1640268302/redacted)Device:1,5Inode:8597208698Links:1Access:FriMay2510:55:212018Modify:FriMay2510:56:252018Change:FriMay2510:56:252018
Sepertinya >> filetidak akan memperbarui waktu modifikasi. Bukan apa yang dicari OP tetapi hanya ingin menunjukkan itu sepertinya bukan alternatif yang lengkap untuk disentuh.
Jesse_b
2
Karena pertanyaan tidak menentukan shell tertentu. Mungkin baik untuk menunjukkan bahwa > filedalam zsh sama dengan cat > file, tidak : > file.
JoL
Juga, tcsh memungkinkan : > file, tetapi salah > file. Mungkin kesetaraan > fileuntuk : > fileterbatas pada bourne shell and bash?
JoL
+1 untuk ketelitian, namun perhatikan bahwa pada beberapa shell utama (saya bahkan akan menebak semua atau sebagian shell karena implementasi paling sederhana secara alami akan menyebabkan ini berfungsi sebagai efek samping), Anda dapat menyentuh beberapa file menggunakan pengalihan shell: : >foo >baratau : >>foo >>barakan sentuh keduanya foodan bar.
mtraceur
Hanya menjadi bertele-tele karena konteks pertanyaan aktual di sini, tetapi : >foo >bartidak akan touchfile; itu akan mengarahkan (null) output :ke dalam file. touchakan menyentuh file. (:
DopeGhoti
32
Karena Anda dapat touchbeberapa file sekaligus tanpa mengetik karakter khusus apa pun. Itu termasuk hal-hal seperti ekspansi brace, misalnya touch file{1,2,3,4}.
Masalah lain adalah ketika Anda menulis tutorial, agak penting untuk menyadari bahwa pembaca Anda mungkin tidak terlalu berpengalaman dalam subjek. Perintah sederhana bisa lebih dimengerti daripada kombinasi karakter non-huruf yang terlihat aneh. Saya berharap ada sejumlah pengguna shell kasual yang tidak tahu apa :itu, karena alasan sederhana bahwa itu tidak benar - benar melakukan apa - apa. Demikian pula untuk dataran > footanpa perintah: bahkan jika Anda tahu apa redirection, redirection tanpa sumber mungkin tidak intuitif.
Juga, di sini di unix.se kita sering menulis sampel perintah dengan tanda dolar terkemuka untuk menunjukkan prompt. Karakter khusus pada awal baris mungkin bingung dengan itu. (Perhatikan bahwa ada sistem dan shell yang digunakan >sebagai bagian dari prompt default.)
Dan jika perintahnya tidak sepenuhnya dipahami, selalu ada "sentuhan manusia". Saya ragu bahwa "man:> file" akan mengembalikan sesuatu yang bermanfaat :-) Juga meminta WRT, beberapa (mungkin sebagian besar) memungkinkan Anda untuk mengatur prompt menjadi apa pun yang Anda suka. Milik saya menunjukkan nama sistem (karena saya menggunakan banyak xterms jarak jauh) dan direktori saat ini, dan diatur ke warna berbeda untuk sistem yang berbeda.
jamesqf
1
@ jamesqf, ya. Sekarang, tentu saja ada juga help :atau apa pun yang dimiliki shell Anda untuk dokumentasi. Tetapi itu membutuhkan pengakuan :sebagai perintah dalam dirinya sendiri, mengingat bahwa tidak semuanya memiliki halaman manual, dan akhirnya, dapat ditemukan :dalam dokumentasi. Bagian terakhir bisa sangat sulit. : D
ilkkachu
@ jamesqf, dan yeah, sebagian besar yang saya maksud adalah karakter terakhir dari prompt default.
ilkkachu
1
+1 untuk menunjukkan aspek intuisi dan tidak-menjadi-tidak jelas-konstruk.
mtraceur
@ilkkachu: Ya. Menemukan titik dua dalam dokumentasi tidak terlalu sulit: menemukan yang bukan hanya tanda baca adalah masalah yang berbeda :-)
jamesqf
18
Bagi saya, alasan utamanya adalah keterbacaan. Dengan touch fileAnda tahu apa yang terjadi, bahkan seseorang yang tidak cukup terdidik dalam skrip shell tahu apa yang terjadi. Dan jika tidak, mudah dilakukan man touchdan melihatnya:
A FILE argument that does not exist is created empty
Dengan hal-hal samar seperti :dan >, lebih sulit untuk mengetahui apa yang terjadi, dan karena tidak ada keuntungan nyata, tidak perlu menggunakannya.
Bayangkan Anda sedang mencari salah satu skrip shell lama yang hanya dapat Anda ingat bahwa beberapa file marker di / tmp sedang dibuat. Sangat mudah untuk mengambil semua file * .sh Anda untuk kata "touch". Grepping for a colon malah akan menghasilkan banyak false positive jika Anda tidak tahu nama file yang tepat untuk dicari.
touch
menjadi mandiri akan bekerja dengan cara yang sama apa pun yang harus Anda gunakan.: >> file
atau bahkan>> file
, sehingga mereka memiliki efek yang sama, yaitu TIDAK merusak konten file.touch
terutama memperbarui mtime. Itu tidak mengosongkan file yang ada tidak seperti>
.> file
.Jawaban:
Anda bahkan tidak perlu menggunakan
:
; Anda bisa> file
(setidaknya dibash
; shell lain mungkin berperilaku berbeda).Dalam istilah praktis, tidak ada perbedaan nyata di sini (meskipun overhead dari memanggil
/bin/touch
adalah sesuatu).touch
Namun, juga dapat digunakan untuk memodifikasi cap waktu pada file yang sudah ada tanpa mengubah atau menghapus konten; selanjutnya,> file
akan meniup apa sajafile
yang sudah ada. Ini bisa diselesaikan dengan menggunakan>> file
.Satu perbedaan lainnya
touch
adalah Anda dapat membuatnya (atau memperbarui cap waktu) beberapa file sekaligus (misalnyatouch foo bar baz quux
) dengan sintaksis yang lebih ringkas daripada dengan pengalihan, di mana setiap file memerlukan pengalihan sendiri (mis>foo >bar >baz >quux
.).Menggunakan
touch
:Menggunakan pengalihan:
sumber
>> file
tidak akan memperbarui waktu modifikasi. Bukan apa yang dicari OP tetapi hanya ingin menunjukkan itu sepertinya bukan alternatif yang lengkap untuk disentuh.> file
dalam zsh sama dengancat > file
, tidak: > file
.: > file
, tetapi salah> file
. Mungkin kesetaraan> file
untuk: > file
terbatas pada bourne shell and bash?: >foo >bar
atau: >>foo >>bar
akan sentuh keduanyafoo
danbar
.: >foo >bar
tidak akantouch
file; itu akan mengarahkan (null) output:
ke dalam file.touch
akan menyentuh file. (:Karena Anda dapat
touch
beberapa file sekaligus tanpa mengetik karakter khusus apa pun. Itu termasuk hal-hal seperti ekspansi brace, misalnyatouch file{1,2,3,4}
.Masalah lain adalah ketika Anda menulis tutorial, agak penting untuk menyadari bahwa pembaca Anda mungkin tidak terlalu berpengalaman dalam subjek. Perintah sederhana bisa lebih dimengerti daripada kombinasi karakter non-huruf yang terlihat aneh. Saya berharap ada sejumlah pengguna shell kasual yang tidak tahu apa
:
itu, karena alasan sederhana bahwa itu tidak benar - benar melakukan apa - apa. Demikian pula untuk dataran> foo
tanpa perintah: bahkan jika Anda tahu apa redirection, redirection tanpa sumber mungkin tidak intuitif.Juga, di sini di unix.se kita sering menulis sampel perintah dengan tanda dolar terkemuka untuk menunjukkan prompt. Karakter khusus pada awal baris mungkin bingung dengan itu. (Perhatikan bahwa ada sistem dan shell yang digunakan
>
sebagai bagian dari prompt default.)sumber
help :
atau apa pun yang dimiliki shell Anda untuk dokumentasi. Tetapi itu membutuhkan pengakuan:
sebagai perintah dalam dirinya sendiri, mengingat bahwa tidak semuanya memiliki halaman manual, dan akhirnya, dapat ditemukan:
dalam dokumentasi. Bagian terakhir bisa sangat sulit. : DBagi saya, alasan utamanya adalah keterbacaan. Dengan
touch file
Anda tahu apa yang terjadi, bahkan seseorang yang tidak cukup terdidik dalam skrip shell tahu apa yang terjadi. Dan jika tidak, mudah dilakukanman touch
dan melihatnya:Dengan hal-hal samar seperti
:
dan>
, lebih sulit untuk mengetahui apa yang terjadi, dan karena tidak ada keuntungan nyata, tidak perlu menggunakannya.sumber
Bayangkan Anda sedang mencari salah satu skrip shell lama yang hanya dapat Anda ingat bahwa beberapa file marker di / tmp sedang dibuat. Sangat mudah untuk mengambil semua file * .sh Anda untuk kata "touch". Grepping for a colon malah akan menghasilkan banyak false positive jika Anda tidak tahu nama file yang tepat untuk dicari.
sumber