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 menyebutnya dotmv
. Ingatlah bahwa itu file.0
akan menjadi salinan tertua .
Sebagai contoh:
dotmv somefile.txt
Ganti nama somefile.txt
somefile.txt.0
, kecuali yang terakhir ada, dalam hal ini akan terjadi somefile.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 menjalankannya sh 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 menggunakannya exec dotmv
.
#!/bin/sh
# On android change that to /system/bin/sh.
# Validate arguments
if [ $# -lt 1 ]; then
echo "A list of one or more paths is required."
exit 1
fi
# Checks if a path exists and can be moved.
checkPath () {
if [ ! -e "$1" ]; then
echo "'$1' does not exist."
return 1;
fi
if [ ! -w "$1" ]; then
echo "Cannot move '$1', permission denied."
return 1;
fi
return 0;
}
# Finds a new path with numerical suffix.
getName () {
suf=0;
while [ -e "$1.$suf" ]
do let suf+=1
done
Dest=$1.$suf
}
# Loop through arguments -- use quotes to allow spaces in paths.
while (($#)); do
Src=$1
Dest=$1
shift
checkPath "$Src"
if [ $? -eq 0 ]; then
getName "$Src"
mv "$Src" "$Dest"
fi
done
Semoga logika di sini sangat mudah. Ini dapat diimplementasikan dalam python, C, atau bahasa prosedural lengkap turing lainnya dengan file I / O.