9 raqamli tartib raqami yordamida fayllarni tartiblash va qayta nomlash

9 ta raqamli tartib raqamiga ega bo'lish uchun bir nechta faylning nomini katalogga o'zgartirmoqchiman. Bundan tashqari, fayllar eng qadimgi va eng yangi tarixga ko'ra tartiblashini xohlayman. Men bunga keldim:

ls -tr | nl -v 100000000 | while read n f; do mv "$f" "$n.jpg"; done

Bu fayllarni qayta nomlashni xohlayman, lekin ketma-ket raqamlar sanani kuzatib bormaydi. Men ham harakat qildim

ls -tr | cat -n .....

Lekin bu menga boshlang'ich navbatdagi sonni ajratishga imkon bermaydi. Har qanday takliflar mening sintaksim bilan nima noto'g'ri? Maqsadimga erishishning boshqa usullari bormi? Rahmat

1
tekshirish ls dan ehtiyot bo'ling. Muayyan yopiq muhitda siz uchun ishlashi mumkin bo'lsa-da, bu xavfli odat bo'lib, iloji boricha yo'l qo'ymaslik kerak.
qo'shib qo'ydi muallif ghoti, manba
tekshirish ls dan ehtiyot bo'ling. Muayyan yopiq muhitda siz uchun ishlashi mumkin bo'lsa-da, bu xavfli odat bo'lib, iloji boricha yo'l qo'ymaslik kerak.
qo'shib qo'ydi muallif ghoti, manba
Ha, ls -tr menga kerakli tartibni beradi
qo'shib qo'ydi muallif Paul, manba
Ha, ls -tr menga kerakli tartibni beradi
qo'shib qo'ydi muallif Paul, manba
Nima uchun ketma-ket raqamlar tarixni ta'qib qilmaydi, deysiz? Faqat ls -tr ni ishlatganingizda, sizga kerakli buyurtma beradimi? Agar siz oxirgi marta o'zgartirish vaqtidan ko'ra yaratilish vaqti bilan tartiblashni xohlasangiz, ls -tr o'rniga ls -trc dan foydalaning.
qo'shib qo'ydi muallif vdavid, manba

6 javoblar

Agar tashqi vositani ishlatish ma'qul bo'lsa, rnm dan foydalanishingiz mumkin:

rnm -ns '/i/.jpg' -si 100000000 -s/mt *.jpg

-ns: Name string (new name).
/i/: Index (A name string rule).
-si: Option that sets starting index.
-s/mt: Sort according to modification time.

O'zboshimchalik bilan o'sish qiymatini istasangiz:

rnm -ns '/i/.jpg' -si 100000000 -inc 45 -s/mt *.jpg

-inc: Specify an increment value.

0
qo'shib qo'ydi

Agar tashqi vositani ishlatish ma'qul bo'lsa, rnm dan foydalanishingiz mumkin:

rnm -ns '/i/.jpg' -si 100000000 -s/mt *.jpg

-ns: Name string (new name).
/i/: Index (A name string rule).
-si: Option that sets starting index.
-s/mt: Sort according to modification time.

O'zboshimchalik bilan o'sish qiymatini istasangiz:

rnm -ns '/i/.jpg' -si 100000000 -inc 45 -s/mt *.jpg

-inc: Specify an increment value.

0
qo'shib qo'ydi

Fayl nomingizdan har qanday bo'shliq bo'lsa, quyidagilarni foydalanishingiz mumkin:

i=100000000
find -type f -printf '%[email protected] %p\0'  | \
sort -zk1nr | \
sed -z 's/^[^ ]* //' | \
xargs -0 -I % echo % | \
while read f; do 
   mv "$f" "$(printf "%09d" $i).jpg"
   let i++
done

Buni ajralish uchun ls dan foydalanmaslikka harakat qiling, lekin null baytni turli buyruqlar qatorida \ 0 , -z , -0 .

find buyrug'i fayl vaqtini nom bilan birga yozishga undadi. Keyin fayl sort ed va sed vaqt tamg'asini olib tashlanadi. xargs , o'qish orqali mv buyrug'iga fayl nomlarini beradi.

0
qo'shib qo'ydi

Fayl nomingizdan har qanday bo'shliq bo'lsa, quyidagilarni foydalanishingiz mumkin:

i=100000000
find -type f -printf '%[email protected] %p\0'  | \
sort -zk1nr | \
sed -z 's/^[^ ]* //' | \
xargs -0 -I % echo % | \
while read f; do 
   mv "$f" "$(printf "%09d" $i).jpg"
   let i++
done

Buni ajralish uchun ls dan foydalanmaslikka harakat qiling, lekin null baytni turli buyruqlar qatorida \ 0 , -z , -0 .

find buyrug'i fayl vaqtini nom bilan birga yozishga undadi. Keyin fayl sort ed va sed vaqt tamg'asini olib tashlanadi. xargs , o'qish orqali mv buyrug'iga fayl nomlarini beradi.

0
qo'shib qo'ydi
DIR="/tmp/images"
FILELIST=$(ls -tr ${DIR})
n=1
for file in ${FILELIST}; do
    printf -v digit "%09d" $n
    mv "$DIR/${file}" "$DIR/${digit}.jpg"
    n=$[n + 1]
done

Shunga o'xshash narsa? Keyin boshlang'ich sekans raqamini ajratish uchun n ni ishlatishingiz mumkin. Biroq, sizning fayl nomingizdagi bo'sh joylar mavjud bo'lsa, bu ishlamaydi.

0
qo'shib qo'ydi
DIR="/tmp/images"
FILELIST=$(ls -tr ${DIR})
n=1
for file in ${FILELIST}; do
    printf -v digit "%09d" $n
    mv "$DIR/${file}" "$DIR/${digit}.jpg"
    n=$[n + 1]
done

Shunga o'xshash narsa? Keyin boshlang'ich sekans raqamini ajratish uchun n ni ishlatishingiz mumkin. Biroq, sizning fayl nomingizdagi bo'sh joylar mavjud bo'lsa, bu ishlamaydi.

0
qo'shib qo'ydi