Apakah ada cara cerdas untuk melakukan salin dan memindahkan operasi atau perintah untuk menduplikasi file, tanpa harus melakukan cd
, lalu mv
setelah itu, pada folder yang sama?
Misalnya, saya harus menjalankan yang berikut ini:
mv /folder1/folder2/folder3/file.txt /folder1/folder2/folder3/file-2013.txt
Perhatikan bahwa direktori tempat saya memindahkan file adalah sama, tetapi saya harus meletakkan seluruh path lagi dan kadang-kadang menjengkelkan. Saya ingin tahu apakah ada cara lain untuk melakukan itu tanpa harus meletakkan seluruh jalan lagi , karena operasi akan dilakukan di jalur yang sama.
Jawaban:
Cukup gunakan ekspansi brace :
Ini sama dengan menulis:
Ekspansi Brace memungkinkan Anda memberikan lebih banyak argumen, tentu saja. Anda bahkan dapat melewatkan rentang untuk itu, misalnya untuk membuat beberapa folder tes, Anda dapat menjalankan
mkdir test_{a..z}
, dan mulai dengan Bash 4, Anda dapat membuat urutan nol-empuk juga, seperti dalamtouch foo{0001..3}
, yang membuatfoo0001
,foo0002
danfoo0003
. The Bash Hacker Wiki memiliki sebuah artikel dengan beberapa contoh untuk Anda.Jika Anda harus menggunakan dua perintah yang berbeda, gunakan subkulit dan di
cd
sana terlebih dahulu, seperti pada jawaban @ Ignacio .sumber
brace
ekspansi, terima kasih!meniac ~: mv /tmp/f1/f2/f3/f4/f5/f6/{file.txt, file2.txt} mv: cannot stat ``/tmp/f1/f2/f3/f4/f5/f6/{file.txt,': No such file or directory
/bin/bash
, dan Anda tidak ada dalam skrip yang ada/bin/sh
di shebang atau shell lain yang tidak mendukung ekspansi brace? Jika Anda menjalankanset
, jangan AndaSHELLOPTS
mengandungbraceexpand
?file.txt,
danfile2.txt
.mv /folder1/folder2/folder3/file{,-2013}.txt
Jalankan operasi dalam subkulit.
Perubahan direktori kerja tidak akan disebarkan ke shell induk.
sumber
ash
,dash
,ksh88
Belum lagi shell Bourne tua contoh kerang tidak mendukung itu.Jika Anda ingin pintar, inilah bash histori ekspansi
Saya tidak akan menggunakan ini sendiri karena saya merasa tidak mungkin untuk menghafal. Saya kadang-kadang menggunakan setara vim , tetapi harus mencarinya hampir setiap waktu.
sumber
Anda dapat mengatur variabel. Tentu saja ini memiliki efek samping meninggalkan variabel di sekitar.
sumber
(D="/folder1/folder2/folder3"; mv "$D"/file.txt "$D"/file-2013.txt)
atau hanya dengan menambahkanunset
perintah di akhir. (Saya menambahkan tanda kutip sebagai ”praktik terbaik”; jika Anda terbiasa selalu menggunakan tanda kutip, Anda tidak perlu berhenti dan menggaruk kepala saat nama path yang berisi karakter khusus muncul.)cd
daripada mengatur variabel. Tidak banyak lebih mudah, saya akui.Saya suka solusi lain, tapi ini yang lain, diimplementasikan sebagai skrip dengan array bash, pushd, popd:
sumber
Slhck langsung menjawab pertanyaan dengan cara yang sesederhana mungkin, tetapi Valter juga menyukai jawaban autopop, jadi inilah salah satu yang sejalan;
sumber