Saya tahu Anda dapat melakukannya mkdir
untuk membuat direktori dan touch
membuat file, tetapi apakah tidak ada cara untuk melakukan kedua operasi sekaligus?
yaitu jika saya ingin melakukan hal di bawah ini ketika folder other
tidak ada:
cp /my/long/path/here/thing.txt /my/other/path/here/cpedthing.txt
Kesalahan:
cp: cannot create regular file `/my/other/path/here/cpedthing.txt': No such file or directory
Adakah yang datang dengan fungsi sebagai solusi untuk ini?
Jawaban:
Gunakan
&&
untuk menggabungkan dua perintah dalam satu baris shell:Catatan: Sebelumnya saya merekomendasikan penggunaan
;
untuk memisahkan dua perintah tetapi seperti yang ditunjukkan oleh @trysis mungkin lebih baik digunakan&&
dalam banyak situasi karena jikaCOMMAND1
gagalCOMMAND2
tidak akan dijalankan juga. (Jika tidak, ini dapat menyebabkan masalah yang mungkin tidak Anda duga.)sumber
&&
, seperti halnya;
, jika perintah pertama gagal, perintah kedua akan tetap berjalan (dan juga gagal, karena direktori itu belum ada). Dengan&&
jika perintah pertama gagal, maka perintah kedua tidak berjalan.mkdir -p /my/other/path/here && touch $_/cpredthing.txt
. Pada$_
dasarnya diperluas menjadi "argumen terakhir dalam perintah terakhir yang dijalankan".touch
mengambil-p
parameter sepertimkdir
itu.Anda harus membuat semua direktori induk terlebih dahulu.
Jika ingin berkreasi, Anda bisa membuat fungsi :
Dan kemudian gunakan seperti perintah lainnya:
sumber
&&
- Bagaimana?supertouch "/tmp/abc/def ghi/jkl mno.txt"
dan gagal. Semua perintahdirname
,mkdir
dantouch
memberikan erros.mktouch
ini.Lakukan dengan / usr / bin / install:
ketika Anda tidak memiliki file sumber:
sumber
-D /dev/null
, yang lebih mudah saya ingat.Inilah yang akan saya lakukan:
mkdir -p /my/other/path/here && touch $_/cpredthing.txt
Di sini,
$_
adalah variabel yang mewakili argumen terakhir ke perintah sebelumnya yang kita jalankan sejalan.Seperti biasa jika Anda ingin melihat seperti apa hasilnya, Anda dapat mengujinya dengan menggunakan
echo
perintah, seperti:echo mkdir -p /code/temp/other/path/here && echo touch $_/cpredthing.txt
Output mana sebagai:
Sebagai bonus, Anda dapat menulis banyak file sekaligus menggunakan brace expansion, misalnya:
Sekali lagi, benar-benar dapat diuji dengan
echo
:sumber
sumber
dirname -z "$@" | xargs -0 mkdir -p
sebagai gantinya, demi kinerja. (Berhenti mengintai, dan bergabunglah, demi Pete! ;-)Anda dapat melakukannya dalam dua langkah:
sumber
sumber
seperti yang saya lihat dan uji di forum unix, ini memecahkan masalah
sumber
tidak perlu
if then
pernyataan ... Anda dapat melakukannya pada satu baris usign;
- atau dalam dua baris -
-
-p
kesalahan pencegahan kembali jika direktori sudah ada (yang saya datang ke sini mencari :))sumber
Dalam kasus khusus (tetapi tidak jarang) di mana Anda mencoba membuat ulang hierarki direktori yang sama,
cp --parents
bisa berguna.Misalnya jika
/my/long
berisi file sumber, danmy/other
sudah ada, Anda dapat melakukan ini:sumber
kalau mau simple dengan hanya 1 param snippet:
sumber
rm -rf
perintah dengan bersyukur . - † Artinya, berjam-jam , dengan asumsi Anda mematuhi kebijakan kontrol / cadangan versi yang masuk akal ... jika tidak, mungkin akan memakan waktu berbulan-bulan.rm -rf
tidak boleh disarankan tanpa penjelasan dan peringatan yang tepat.