Bagaimana saya bisa menghasilkan nama baru untuk file jika ada file yang sudah ada Dengan nama yang sama? Di lingkungan Desktop, nama baru dihasilkan, saya menambahkan nomor ke akhir nama file, tetapi bagaimana ini bisa dilakukan dari baris perintah?
Saya menggunakan sistem operasi Android dengan Busybox.
mktemp
?mktemp
tidak akan berfungsi.Jawaban:
Dengan asumsi Anda memiliki shell POSIX, Anda dapat melakukan ini:
Cara menggunakan ini
Ini adalah fungsi jadi simpan di Anda
~/.bashrc
dan menyebutnya seperti biasamv
.Apa ini?
mv
executable asli dalamMV
variabelDEST
DEST
ada dan bukan direktori, fungsi ini mengasumsikan bahwa nama Anda sedang mencoba untuk memecahkan suatu file.
, yang menandai ekstensi), ekstensi (apa pun setelah final.
), jumlah (jika ada; apa pun di awalan setelah final-
).mv a.txt b.txt
akan terlebih dahulu mencobamv a.txt b-001.txt
.mv
Panggilan selanjutnya ini juga harus merupakan fungsi itu sendiri karena jikab-001.txt
juga ada, kami ingin terus menambah penghitung hingga kami menemukan nama file baru yang tidak ada.mv
executable asli dipanggil dengan argumen asli Anda.Peringatan
foo-001.txt
, itu akan dipindahkan kefoo-001-001.txt
.Catatan
3
dalamprintf
pernyataan kepada apa pun yang Anda suka.sumber
/tmp
adalah direktori yang ada dan disebut/bin/mv file1 /tmp
Saya tidak melihat di mana masalahnya.Saya biasanya menggunakan alat ini
mktemp
untuk membuat file sementara yang andal. Ini default untuk membuat file, tetapi juga dapat membuat direktori juga, melalui-d
peralihannya.Contoh
Inilah cara Anda dapat membuat beberapa nama sementara ke file di direktori Anda saat ini.
Ini akan membuat file untuk Anda.
Referensi
sumber
mktemp
di Android, tetapi +1 dari saya tetap karena ini adalah jawaban yang bagus untuk pertanyaan yang bagus, bijak U&L./system/bin/sh
dan tampaknyash
kompatibel - dibangun sepertiif [ -w $file ]
pekerjaan,mv
danrename
tersedia - sehingga skrip untuk melakukan ini hanya dengan built-in harus bekerja di sana.Ini adalah alternatif dari naskah Joseph R yang tidak memiliki peringatan! Ini akan menambahkan sufiks numerik ke nama path (path bisa berupa direktori atau file), menambah nilai sufiks hingga ditemukan yang belum ada. Utilitas lain seperti
logrotate
menggunakan pola yang sama, tetapi memutar semua salinan yang ada sehingga yang baru selalu memiliki '0' untuk sufiks. Karena ini bukan rotasi dalam arti itu, saya akan menyebutnyadotmv
. Ingatlah bahwa itufile.0
akan menjadi salinan tertua .Sebagai contoh:
Ganti nama
somefile.txt
somefile.txt.0
, kecuali yang terakhir ada, dalam hal ini akan terjadisomefile.txt.1
, dan seterusnya. Anda dapat membuat daftar lebih dari satu file (dotmv this that "the other thing"
dll.), Semuanya akan dipindahkan dari titik.Saya percaya ini kompatibel dengan POSIX - ini berjalan dengan
set -o posix
di bash (tapi itu adalah tes yang meragukan). Saya juga diuji dengan shell android (jelly bean 4.2.1), dan berfungsi di sana. Namun, di android Anda harus mengubah shebang seperti yang ditunjukkan atau menjalankannyash dotmv
- yang mana Anda akan lakukan kecuali Anda memiliki perangkat yang telah di-rooting, karena tidak ada cara untuk membuat skrip dapat dieksekusi sebaliknya. Mengubah shebang akan memungkinkan Anda untuk menggunakannyaexec dotmv
.Semoga logika di sini sangat mudah. Ini dapat diimplementasikan dalam python, C, atau bahasa prosedural lengkap turing lainnya dengan file I / O.
sumber