mv, varsa yeniden adlandır


26

Tek bir dizinde çok fazla görüntü oluşturmam gerekiyor. Bu görüntülerin çoğu aynı dosya adına sahiptir.

mvHedef dosya adı zaten varsa ve böylece böyle bir pic1.jpegşey olursa, dosyaları otomatik olarak yeniden adlandıracak güvenli bir sürümü var pic1_2.jpegmı?

Kendi python senaryomu yazabilirim ama dışarıda bunun gibi bir şey olmalı, böylece yapabilirim:

find . -type f -name *.jpg -exec mvsafe '{}' /targetpath/ \;

Yanıtlar:


38

mv bunu zaten kutudan destekliyor (en azından Debian'da):

mv --backup=t <source_file> <dest_file>

Mv (1) man sayfasında görüldüğü gibi

--backup[=CONTROL]
         make a backup of each existing destination file

The  backup  suffix  is  `~',  unless  set  with   --suffix   or   SIM‐
PLE_BACKUP_SUFFIX.   The version control method may be selected via the
--backup option or through the  VERSION_CONTROL  environment  variable.

Yapmak için --backup=taşağıdaki gibi çağırmak, ortalama "numaralı yedeklerini":

env VERSION_CONTROL=numbered mv --backup=t <source_file> <dest_file>

(dest_file elbette bir dizin olabilir).

Düzenleme: sonraki sürümlerde (en azından GNU coreutils 8.22, ancak daha önce prolly)

mv --backup=numbered <source_file> <dest_file>

1
İnanılmaz derecede temiz bir çözüm için +1. BTW, seçenek RHEL 6'da da mevcut.
Paweł Brodacki

Güzel işlevsellik olsa da, bu benim uzantımda eki ekleyeceği için benim durumumda pek yardımcı olmuyor, bu yüzden dosyalar _1.jpg olarak adlandırılırken, .jpg ~ 1 ~ gibi isimlerle bitecek. Muhtemelen dosyaları taşıdıktan sonra yeniden adlandırmak için mmv kullanacağım.
theduke,

4
Bu, mv --backup = numbered: mmv -v "işlevini yaptıktan sonra istediğim sonucu elde edecek olan mmv komutudur . # . ~ * ~" "# 1_ # 3. # 2"
theduke

Debian sistemimde (mmv 1.01b-18), doğru mmv komutu şöyledir:mmv -v "*.*~*~" "#1_#3.#2"
Xavier
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.