Solusi 1:
untuk satu file coba
mv dir1/dir2/dir3/file.{txt,txt.old}
di mana X{a,b}
konstruksi perluas ke Xa Xb
, Anda dapat memiliki pratinjau menggunakan
echo dir1/dir2/dir3/file.{txt,txt.old}
untuk melihat apakah itu sesuai dengan kebutuhan Anda.
catatan:
-
itu untuk banyak file
mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
tidak mungkin untuk memperluas apa yang Anda inginkan. (ini akan diperluas menjadi campuran dari file.txt file1.txt.old file2.txt ...)
-
{txt,txt.old}
dapat disingkat menjadi{,.old}
sesuai komentar -
jika nama direktori tidak ambigu, karakter pengganti dapat digunakan.
mv *1/*2/d*/*.{,old}
untuk banyak file gunakan rename
rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt
jatuhkan -n
untuk memiliki penggantian nama yang efektif.
Solusi 2:
Perintah rename
mengganti nama semua file yang cocok. Tujuan utamanya adalah untuk mengganti nama banyak file, tetapi jika ekspresi Perl hanya cocok dengan satu file, maka itu hanya akan mengganti nama file tunggal ini. Untuk detail dan sintaks khusus distro, silakan baca halaman manual:man rename
.
Contoh penggunaan:ganti nama "/path/file.txt" menjadi "/path/file.txt.old":
rename 's/file.txt/file.txt.old/g' /path/file.txt
Notasi yang lebih pendek (berkat shalomb):
rename 's/$/.old/' /path/file.txt
rename '$_.=".old"' /path/file.txt
Untuk uji coba gunakan rename -n
.
Lebih banyak contoh dan detail dapat ditemukan di https://thepcspy.com/read/bulk-rename-files-in-ubuntu/
Solusi 3:
Saya suka solusi @archemar dalam menggunakan ekspansi {}, karena Anda bisa menggunakannya saat Anda sudah memulai baris perintah. Berikut adalah beberapa kemungkinan lain untuk kelengkapan:
F="dir1/dir2/dir3/file.txt" ; mv "$F" "$F.old"
(kutipan hanya diperlukan jika Anda memiliki spasi atau karakter pemecah kata lain dalam nama)
mymv() {
mv "$1/$2" "$1/$3"
}
mymv dir1/dir2/dir3 file.txt file.txt.old
mymv dir5/dir6/dir7 file.txt file.txt.old
Catatan:
- Ini adalah sintaks bash, Anda mungkin menggunakan shell lain
mymv
bisa berupa string yang masuk akal, saya menggunakan mymv untuk "my move".- Definisi fungsi dapat diletakkan di .bash_profile Anda
Satu lagi:
cd dir1/dir2/dir3 ; mv file.txt file.txt.old ; cd -
tapi
(cd dir1/dir2/dir3/ && exec mv file.txt file.txt.old)
(dari @Adam dan @CharlesDuffy) bisa dibilang lebih baik jika cd gagal.
Solusi 4:
Untuk kasus satu kali, jika saya tidak ingin mengubah direktori saya saat ini, saya mungkin hanya menggunakan sub-shell:
(cd dir1/dir2/dir3/ && mv file.txt file.txt.old)
Karena kamu cd
di dalam sub-shell, Anda belum mengubah direktori Anda di shell Anda yang sebenarnya
Solusi 5:
Jika Anda ingin memasukkan subdirektori untuk mempersingkat mv
perintah, tetapi ingin kembali ke direktori saat ini setelah itu, ada dua cara untuk melakukannya. Salah satunya adalah dengan meletakkan cd
dan mv
dalam subkulit (seperti yang telah disarankan).
Cara lainnya adalah dengan menggunakan pushd
dan popd
untuk mengubah direktori:
pushd dir1/dir2/dir3/; mv file.txt file.txt.old; popd
pushd
perintahnya seperti cd
, kecuali itu pertama-tama mendorong nama direktori saat ini ke tumpukan. popd
menghapus nama teratas dari tumpukan dan mengubah ke direktori itu.