Bir klasördeki dosyaları sıralı numaralara yeniden adlandırma


230

Bir dizindeki dosyaları sıralı numaralarla yeniden adlandırmak istiyorum. Dosyaların oluşturulma tarihine göre.

Örnek için sadf.jpgiçin 0001.jpg, wrjr3.jpgiçin 0002.jpgve benzeri dosyaların toplam miktarın (gerekli değilse ekstra sıfır gerek) bağlı, başında sıfır sayısı.


Stackoverflow.com/questions/880467/… 'a bakıyordum , ama bunu benim için çalışamıyorum.
Gnutt

1
Linux / Unix bir oluşturma tarihi saklamaz.
sonraki duyuruya kadar duraklatıldı.

1
ls -1tr | -v / s /.*/ bizim $ i; eğer (! $ i) {$ i = 1;} sprintf ("% 04d.jpg", $ i ++) / e '
maXp

Yanıtlar:


314

Bir döngü kullanmaya çalışın letve printfdolgu için:

a=1
for i in *.jpg; do
  new=$(printf "%04d.jpg" "$a") #04 pad to length of 4
  mv -i -- "$i" "$new"
  let a=a+1
done

-ibayrağın kullanılması, varolan dosyaların üzerine otomatik olarak yazılmasını engeller.


4
Ayrıca yapabilirsiniz printf -v new "%04d.jpg" ${a}değişken içine değerini koymak. Ve ((a++))değişkeni artırmak için çalışır. Ayrıca, bu, oluşturma tarihi sırasında yapmaz veya OP'nin belirttiği şeyler olan dolguyu en aza indirmez. Ancak, Linux / Unix'in bir oluşturma tarihi saklamadığı unutulmamalıdır.
sonraki duyuruya kadar duraklatıldı.

3
Bu benim bash ortamında çalışmak için mv sarmak için çift alıntı gerekiyordu. mv "$ {i}" "$ {new}"
Gary Thomann

2
Sadece Cygwin olabilir (terminal davranışı normal Unix mermileri ile büyük ölçüde aynı olsa da), ancak dosya adında boşluk olduğunda bir sorun var gibi görünüyor.
Geesh_SO

2
mv -- "$i" "$new"Kesik çizgilerle başlayan kaynak dosya adlarını doğru işlemek için de kullanılması istenir ; olduğu mvgibi, bayrak koleksiyonları gibi dosya adlarını ayrıştırmaya çalışacaktır.
Charles Duffy

2
Bir bakışta yaklaşık 800 dosya kaybettim. Bence -icevapta yer almalı ve not buna göre yeniden yazılmalıdır. bu daha güvenli olacak. :(
KrIsHnA

270

Güzellik bir satırda:

ls -v | cat -n | while read n f; do mv -n "$f" "$n.ext"; done 

Değişebilirsin .extile .png, .jpgvb


4
efsane :), ben Windows üzerinde git kabuk üzerinde kullanılan, harika çalışıyor! ^^.
Mr.K

4
Harika çalışıyor. Güzellik bir satırda. Ben ls -tr dosyaları son değiştirilme zamanına göre ekledim.
Ranjith Siji

32
Bunun gibi printf ekleyin: ls | cat -n | while read n f; do mv "$f" `printf "%04d.extension" $n`; donesıfır dolgulu numaralara sahip olmak
Seweryn Niemiec

8
Uyarı: -nDosyaların yanlışlıkla üzerine yazılmasını önlemek için mv komutuna eklemek isteyebilirsiniz . Bunu zor yoldan keşfettim!
Ian Danforth

4
Bu cevap ve diğerlerinin yorumlarından bazı harika fikirler bir araya getirmek: ls -1prt | grep -v "/$" | cat -n | while read n f; do mv -n "${f}" "$(printf "%04d" $n).${f#*.}"; done Sonuçlar: (1) modifikasyon sırasına göre sıralanmış, daha sonra endeksli dosyalar; (2) dizinleri yok sayar - özyinelemeli değil; (3) ped indeksleri; (4) orijinal uzantıyı korur.
Jorge

63

Gauteh'in basitliği için çözümünü seviyorum, ancak önemli bir dezavantajı var. Binlerce dosya üzerinde çalışırken, "bağımsız değişken listesi çok uzun" mesajını alabilirsiniz ( bu konuda daha fazlası ) ve ikincisi, komut dosyası gerçekten yavaşlayabilir. Benim durumumda, kabaca 36.000 dosya üzerinde çalışan, komut dosyası yaklaşık taşındı. saniyede bir öğe! Bunun neden gerçekleştiğinden tam olarak emin değilim ama meslektaşlarımdan aldığım kural " findsenin arkadaşın" idi .

find -name '*.jpg' | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

Öğeleri saymak ve komut oluşturmak için gawk kullanıldı. Yine de, ana farkı not edin. Varsayılan olarak find, geçerli dizindeki ve alt dizinlerindeki dosyaları arar, bu nedenle gerekirse yalnızca geçerli dizindeki aramayı sınırlandırdığınızdan emin olun ( man findnasıl yapıldığını görmek için kullanın ).


7
Daha NRkısa bir komut için satır numarasını kullanacak şekilde değiştirdim . gawk '{ printf "mv %s %04d.jpg\n", $0, NR }'
Apiwat Chantawibul

12
Burada büyük güvenlik açıkları var. Adlı bir dosyanız varsa düşünün $(rm -rf /).jpg.
Charles Duffy

Charles'ı işaret ettiğin için teşekkürler. Güvenli bir çözüm önerebilir misiniz?
beibei2

2
dosya adının boşluk olması durumunda bozulur. Kaynak dosya adının çevresinde tırnak işaretleri kullanın. printf "mv \"% s \ "% 04d.jpg \ n", 0 $, a ++
baskin

1
forDöngü açık konuşmak gerekirse, dosya başına 1 saniye almıyor. Dosya sisteminden 36.000 dosya adının alınması uzun zaman alıyor, ardından makul şekilde hızlı bir şekilde döngülüyor. Birçok dosya sisteminde, hangi komutları çalıştırdığınızdan bağımsız olarak büyük dizinlerle ilgili sorunlar vardır; ancak genellikle, eşleşen dosyaların listesini findalması ve sıralaması gerektiği için bir kabuk jokerinden daha hızlı olacaktır .
Üçlü

30

"rename" komutu ile

rename -N 0001 -X 's/.*/$N/' *.jpg

veya

rename -N 0001 's/.*/$N.jpg/' *.jpg

32
Benim rename(Linux Mint 13) -Nseçeneğim yok.
Luke H

Sadece yeniden adlandırma komutundan bahsetmek için oy kullanabilirim, hiç duymadım
Dmitry Korolyov

8
Nerede -N seçeneği ile yeniden adlandırma komutu alır bilmekle ilgileniyorum. My Ubuntu 14.04 buna sahip değil.
Stephan Henningsen

1
renameKomutu seviyorum , ama hiç bilmiyordum -N! Teşekkürler!
Dan Lecocq

1
Orada olarak bilinen en az üç farklı araçlarrename . @Bostrot tarafından gönderilen bağlantı başka bir yeniden adlandırma aracıdır ve @RomanRhrnNesterov bunu kullanmış gibi görünüyor. Ped renamePeder Stray ve Larry Wall'un tüm kullanıcılarına ( perl-renamearch linux renameüzerinde paket ve debian / ubuntu üzerinde paket ): $NKendinizi tanımlayabilirsiniz :perl-rename '$N=sprintf("%04d",++$N); s/.*/$N.jpg/' *.jpg
Socowi

30

OSX'te Pero'nun çözümünü kullanmak için bazı değişiklikler yapılması gerekiyordu. Kullandım:

find . -name '*.jpg' \
| awk 'BEGIN{ a=0 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' \
| bash

Not: Ters eğik çizgiler hattın devamı için oradadır

edit 20 Temmuz 2015: dosya adlarını boşluklarla desteklemek \"%s\"için mvkomut argümanını alıntılamak için incorporated @ klaustopher'nın geri bildirimi .


3
Pero'nun çözümü gibi burada da güvenlik açıkları var. Adlı bir dosyanız varsa düşünün $(rm -rf /).jpg.
Charles Duffy

Teşekkürler, bu işe yarıyor. Ama ilk argümanı alıntılamalısın mv. Yani adında bir dosyanız varsa some thing.jpgbetiğiniz başarısız olur. Ne kullandım:find . -name '*.jpg' | awk 'BEGIN{ a=0 }{ printf "mv \"%s"\ wallpaper-%04d.jpg\n", $0, a++ }' | bash
klaustopher

-maxdepth 1üzgünüm daha güvenli olmak için ben muhtemelen sadece geçerli dizinde jpgs üzerinde çalışmak için kullanabilirsiniz .
Peter Perháč

Boru karakterini önceki satırın sonuna taşırsanız, ters eğik çizgiye ihtiyacınız yoktur.
Üçlü

ls -1 *.jpgfind yerine kullanabilirsiniz , aksi takdirde sıralanmaz. Veya |sort|
awk'tan

28

Orijinal uzantıları koruyan, önde gelen sıfırlar ekleyen ve aynı zamanda OSX'te çalışan çok basit bir bash bir astar:

num=0; for i in *; do mv "$i" "$(printf '%04d' $num).${i#*.}"; ((num++)); done

Basitleştirilmiş versiyonu http://ubuntuforums.org/showthread.php?t=1355021


Tam aradığım şey. Başlangıç ​​dizinini ayarlayabilmenizi isterim.
Jack Vial

2
Bunun dosyaların orijinal sırasını korumadığını lütfen unutmayın .
Roy Shilkrot

@RoyShilkrot Ne demek istiyorsun » asıl siparişi vermeyecek «? Bash ve diğer posix kabuklarındaki küreler, sistemin yerel ayarına göre sıralanmış bir sırada genişler. Tabii ki, bu daha 9.extönce sıralanmaz 11.ext, ancak diğer araçlar da (böyle ls) yapmayacaktır.
Socowi

11

Her durumda çalışmak için, adında boşluk olan dosyalar için \ "koyun

find . -name '*.jpg' | gawk 'BEGIN{ a=1 }{ printf "mv \"%s\" %04d.jpg\n", $0, a++ }' | bash

3
Aslında tüm durumları kapsamaz. Değişmez tırnak içeren bir dosya adı önemsiz bir şekilde kaçabilir - ve tek tırnak yerine çift tırnak kullandığınız için, gibi genişletmeler $(rm -rf /)onurlandırılır.
Charles Duffy

11

Eğer renamedesteklemiyorsanız -N, böyle bir şey yapabilirsiniz:

ls -1 -c | xargs rename -n 's/.*/our $i; sprintf("%04d.jpg", $i++)/e'

Düzenle Belirli bir numarayla başlamak için aşağıdaki (biraz çirkin görünümlü) kodu kullanabilirsiniz, 123 yerine istediğiniz numarayı girmeniz yeterlidir:

ls -1 -c | xargs rename -n 's/.*/our $i; if(!$i) { $i=123; } sprintf("%04d.jpg", $i++)/e'

Bu, dosyaları oluşturma süresine göre sıralar (önce en yenisi, -rsıralamayı tersine çevirmek için ls'ye ekleyin ), sonra bu dosyaların listesini yeniden adlandırmak için gönderir. Yeniden adlandır sayacı biçimlendirmek ve artırmak için normal ifadede perl kodunu kullanır.

Ancak, EXIF ​​bilgileri içeren JPEG resimlerle uğraşıyorsanız, tavsiye ederim exiftool

Bu, "Örneklerin Yeniden Adlandırılması" altındaki exiftool dokümanlarından alınmıştır.

   exiftool '-FileName<CreateDate' -d %Y%m%d_%H%M%S%%-c.%%e dir

   Rename all images in "dir" according to the "CreateDate" date and time, adding a copy number with leading '-' if the file already exists ("%-c"), and
   preserving the original file extension (%e).  Note the extra '%' necessary to escape the filename codes (%c and %e) in the date format string.

Kullanarak belirli bir sayıdan nasıl başlayabilirim rename?
Ocak

7

OSX'te Homebrew'dan yeniden adlandırma komut dosyasını yükleyin:

brew install rename

O zaman gerçekten gülünç kolayca yapabilirsiniz:

rename -e 's/.*/$N.jpg/' *.jpg

Veya güzel bir önek eklemek için:

rename -e 's/.*/photo-$N.jpg/' *.jpg

3
Bu harika bir senaryo ve sadece Perl'e bağlı. demlemek sadece mac'larda çalışır, ancak github'dan ( github.com/ap/rename ) alabilir ve Linux veya Windows'ta kullanabilirsiniz.
Tim Danner

3
bu benim için işe yaramıyor. AnladımGlobal symbol "$N" requires explicit package name (did you forget to declare "my $N"?) at (user-supplied code).
Anthony Chung

Bir Mac kullanıcısı olarak, @TimDanner tarafından bağlanan yeniden adlandırma uygulamasının süper taşınabilir olduğunu bildirmekten mutluluk duyuyorum, Zip arşivini indirmek kadar kolaydı, yeniden adlandırma yardımcı programını bash profil yolumun göreceği şekilde ayarlanan bir dizine bırakarak ve kutudan çıkar çıkmaz çalışır. Bunun MacPorts'ta mevcut olmamasına şaşırdım. Rename (2) için bir BSD el kitabına sahip olduğum kadar garip buluyorum, ancak yeniden adlandırıldığında çalıştır komut yok diyecektir. Git şekil.
adamlogan

2

Tüm dosyaları yeniden sıralamak için küçük harf uzantısını yeniden adlandır komutunu izleyin:

rename --counter-format 000001 --lower-case --keep-extension --expr='$_ = "$N" if @EXT' *

1

Benzer bir sorunum vardı ve bu nedenle bir kabuk senaryosu yazdım. Birçok iyi cevabın zaten yayınlanmış olmasına bakılmaksızın göndermeye karar verdim, çünkü birisi için yararlı olabileceğini düşünüyorum. Geliştirmek için çekinmeyin!

numara vermek

@Gnutt İstediğiniz davranış aşağıdakileri yazarak elde edilebilir:

./numerate.sh -d <path to directory> -o modtime -L 4 -b <startnumber> -r

Seçenek -rdışarıda bırakılırsa, raybalama sadece simüle edilecektir (Test için yardımcı olmalıdır).

L işareti, hedef numaranın uzunluğunu açıklar (baştaki sıfırlarla doldurulacaktır), seçeneklerle birlikte bir önek / sonek eklemek de mümkündür -p <prefix> -s <suffix>.

Birisi numaralanmadan önce dosyaların sayısal olarak sıralanmasını isterse, -o modtimeseçeneği kaldırın .


1
a=1

for i in *.jpg; do
 mv -- "$i" "$a.jpg"
 a=`expr $a + 1`
done

1

Bu dosyaların oluşturulma sırasına göre listelenen, birincisi en eski olan bir dizinde olduğunu varsayalım:

a.jpg
b.JPG
c.jpeg
d.tar.gz
e

sonra ls -1crtam olarak yukarıdaki listeyi çıkarır. Daha sonra şunları kullanabilirsiniz rename:

ls -1cr | xargs rename -n 's/^[^\.]*(\..*)?$/our $i; sprintf("%03d$1", $i++)/e'

hangi çıktılar

rename(a.jpg, 000.jpg)
rename(b.JPG, 001.JPG)
rename(c.jpeg, 002.jpeg)
rename(d.tar.gz, 003.tar.gz)
Use of uninitialized value $1 in concatenation (.) or string at (eval 4) line 1.
rename(e, 004)

Uzantısı olmayan dosyalar için ”başlatılmamış değerin kullanılması […]” uyarısı görüntülenir; görmezden gelebilirsiniz.

Kaldır -ndan renameaslında yeniden adlandırılması uygulamak için komuta.

Bu cevap, Luke'un Nisan 2014'teki cevabından esinlenmiştir . Gnutt'un toplam dosya miktarına bağlı olarak baştaki sıfır sayısını ayarlama gereksinimini yok sayar.


Bu benim için en yararlı cevaptı, çünkü çoğunlukla op'u çalıştırmadan önce kuru çalıştırmak istedim ve ayrıca ls -1tUyaratılış zamanı olarak değiştirerek siparişi ayarlayabildiğim için . Ayrıca renameyüklü değildi, ki sahip değildi.
antonyh

1

Yine küçük değişikliklerle Pero'nun çözümünü kullanarak, çünkü findsipariş öğeleri dizin ağacında çapraz olacak dizin girişleri içinde saklanır. Bu (çoğunlukla) aynı makinede çalıştırmadan çalışmaya tutarlı olacak ve silinmemişse esasen "dosya / dizin oluşturma sırası" olacaktır.

Bununla birlikte, bazı durumlarda, örneğin bu örnekte kullanılan ada göre bazı mantıksal düzen almanız gerekir.

find -name '*.jpg' | sort -n | # find jpegs
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command 

3
Bunu KULLANMAYIN. Bu şekilde bash'a yönlendirmek büyük bir güvenlik riskidir. Dosya adlarından biri formdaysa ne olur blahblah; rm -r * blahblah.jpg?
xhienne

1

Zamana göre sıralı, jpg, baştaki sıfırlar ve bir basename ile sınırlı (muhtemelen bir tane istemeniz durumunda):

ls -t *.jpg | cat -n |                                           \
while read n f; do mv "$f" "$(printf thumb_%04d.jpg $n)"; done

(hepsi bir satırda, olmadan \)


Büyük şemada, bu sayfadaki birçok cevap korkunç, bu yüzden belki de özellikle bir aşağı oyu hak etmiyor. Yine lsde bir senaryoda kullanılan herhangi bir şeyi onaylamaktan çekinmeyin .
Üçlü

Bu yanıtı olumsuz taraftan belki de kırılgan iken saklıyorum, sahip olduğum belirli bir kullanım durumunda işe yaradı.
Ville

1
ls -1tr | rename -vn 's/.*/our $i;if(!$i){$i=1;} sprintf("%04d.jpg", $i++)/e'

-VN adlandırmak - kaldırmayı n test modunda kapalı için

{$ i = 1;} - kontrol başlangıç ​​numarasını

"% 04d.jpg" - kontrol sayısı sıfır 04 ve çıkış uzantısını ayarlayın .jpg


Bu yanıtı yalnızca yerel yeniden adlandırmayı kullandığından kaldırın. Benim kullanım durumum, dosyaların ilk iki hanesini 01: rename -v -n 's/../our $i;if(!$i){$i=1;} sprintf("%02d", $i++)/e' *
00'dan

1

Bana göre bu cevap kombinasyonu mükemmel çalıştı:

ls -v | gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | bash
  • ls -v jpg JPG jpeg ile dosya adı uzantısı sorunlarını önleyerek 1 10 9 doğru sipariş: 1 9 10 sipariş yardımcı olur
  • gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }'4 karakter ve önde gelen sıfırlar ile renumbers. MV'den kaçınarak, yanlışlıkla aynı sayıya sahip olarak zaten var olan hiçbir şeyin üzerine yazmaya çalışmıyorum.
  • bash yürütür

@Xhienne'nin söylediklerinin farkında olun, bilinmeyen içeriği bash'a bağlamak bir güvenlik riski. Ancak taranmış fotoğraflarımı kullanırken benim için durum böyle değildi.


0

Ayrıca ls kullanabilirsiniz

ls *.JPG| awk 'BEGIN{ a=0 }{ printf "mv %s gopro_%04d.jpg\n", $0, a++ }' | bash

5
Bkz. Mywiki.wooledge.org/ParsingLs ve diğer benzer şekilde kırılmış çözümlerde güvenlik açıklarının açıklamaları.
Charles Duffy

1
Bunu KULLANMAYIN. Bu şekilde bash'a yönlendirmek büyük bir güvenlik riskidir. Dosya adlarından biri formdaysa ne olur blahblah; rm -r * blahblah.JPG?
xhienne

0

Diğer çözümlerin çoğu zaten sayı olarak adlandırılmış mevcut dosyaların üzerine yazacaktır. Bu, özellikle komut dosyasını çalıştırırsanız, daha fazla dosya ekler ve ardından komut dosyasını tekrar çalıştırırsanız bir sorundur.

Bu komut dosyası önce var olan sayısal dosyaları yeniden adlandırır:

#!/usr/bin/perl

use strict;
use warnings;

use File::Temp qw/tempfile/;

my $dir = $ARGV[0]
    or die "Please specify directory as first argument";

opendir(my $dh, $dir) or die "can't opendir $dir: $!";

# First rename any files that are already numeric
while (my @files = grep { /^[0-9]+(\..*)?$/ } readdir($dh))
{
    for my $old (@files) {
        my $ext = $old =~ /(\.[^.]+)$/ ? $1 : '';
        my ($fh, $new) = tempfile(DIR => $dir, SUFFIX => $ext);
        close $fh;
        rename "$dir/$old", $new;
    }
}

rewinddir $dh;
my $i;
while (my $file = readdir($dh))
{
    next if $file =~ /\A\.\.?\z/;
    my $ext = $file =~ /(\.[^.]+)$/ ? $1 : '';
    rename "$dir/$file", sprintf("%s/%04d%s", $dir, ++$i, $ext); 
}

0

Bu oneliner, geçerli dizindeki tüm dosyaları listeler, oluşturma zaman damgasına göre ters sırayla sıralar (en eski dosyanın başında olduğu anlamına gelir) ve dosya miktarının gerektirdiği şekilde otomatik olarak sıfırlar ile yeniden adlandırır. Dosya uzantısı korunur.

Cep telefonu resimleri ve filmleri için genellikle yıllardan beri sadece bir klasörüm var. Bu komutu uygulayarak resimlerim ve filmlerim, TV'de veya arşivlemede doğru sırada bir slayt gösterisi için hazırdır.

Dosya adı çakışmaları varsa, dosyalarınızı kaybettiğinizi unutmayın. Bu yüzden önce garip bir şeyi yeniden adlandırın temp001.jpgve son dosya adınızı yürütün.

DIGITS=$(ls | wc -l | xargs | wc -c | xargs); ls -tcr | cat -n | while read n f; do mv "$f" "$(printf "%0${DIGITS}d" $n).${f##*.}"; done

1
lsBir kez değil iki kez koşmak , bundan kaçınılmış gibi görünüyor, ama ben herhangi bir derinlikte çalışmadım.
üçlü

1. Eğer kasıtlı olarak bir oneliner öneriyorsam, bunu neden daha sonra değiştiriyorsunuz? Benim gibi birçok kullanıcı, bir görevin tamamlanması için oneliner'ı kopyalayıp yapıştırmayı tercih ediyor. Satır satır satır kopyalamayı tercih eden başkaları için bu yazışmada başka cevaplar da vardır. 2. Asıl soru "toplam dosya miktarına bağlı olarak önde gelen sıfırların sayısı" idi ve bu birincisi tarafından yapıldı ls, bu yüzden bu yüzden ikisi gerekli. 3. Bu tür komutlar tek adımlıktır ve senaryolara dahil edilmeleri amaçlanmamıştır, bu nedenle insanların tek
Flavio Aiello

1
Üzgünüm, bunun önemli olduğunu düşündüğün farkında değildim. Benim için, kodu büyük ölçüde okuyabilmek, tek bir satır olarak kopyalama / yapıştırma yeteneğini büyük ölçüde azaltır. Bash'in birden fazla çizgiyi kapsayan bir macunla ilgili bir sorun yaşayacağı bir ortam bulamadım, ancak bir şeye bakıyordum.
Üçlü

0

İşte benim için işe yarayan. Herhangi bir dosya adında boşluk içeriyorsa, mv komut boşlukları ve gerçek dosya arasında karışmayın böylece rename komutunu
kullandım .

Burada boşlukları değiştirdim, '' bir dosya adında '_' ile tüm jpg dosyaları için
#! / Bin / bash
'y / / _ /' * jpg # boşlukları _ ile değiştirme
x = 0 olsun;
* .jpg içindeki i için;
    x = (x + 1) olsun
    mv $ i $ x.jpg
tamam

Linux (Ubuntu), "sudo apt install rename" üzerine rename yükleyin
Rishang Bhavsar

0

Günümüzde yeniden adlandırmak için birden fazla dosya seçtikten sonra bir seçenek var (thunar dosya yöneticisinde gördüm).

  1. birden fazla dosya seç
  2. seçenekleri kontrol et
  3. yeniden adlandır seçin

Bir bilgi istemi o kategorideki tüm dosyalarla birlikte gelir sadece kategori bölümüne bakın


-1

Bu komut dosyası, dosyaları Mac OS bash'de oluşturma tarihine göre sıralar. Videoları toplu olarak yeniden adlandırmak için kullanıyorum. Uzantıyı ve adın ilk bölümünü değiştirmeniz yeterlidir.

ls -trU *.mp4| awk 'BEGIN{ a=0 }{ printf "mv %s lecture_%03d.mp4\n", $0, a++ }' | bash

1
Bunu KULLANMAYIN. Bu şekilde bash'a yönlendirmek büyük bir güvenlik riskidir. Dosya adlarından biri formdaysa ne olur blahblah; rm -r * blahblah.mp4?
xhienne

-1

İşte "rename" komutu ile başka bir çözüm:

find -name 'access.log.*.gz' | sort -Vr | rename 's/(\d+)/$1+1/ge'

Baştaki sıfırları geri yüklemek için:rename 's/(\d+)/sprintf("%04d",$1)+1/ge'
Camille Goudeseune

Aşağıdaki gibi adlara sahip dosyaları olan bir klasör için beklendiği gibi çalışmıyor: DSC_3451.JPG, DSC_3452.JPG vb. Find -name '* .JPG' | sıralama -Vr | 's / (\ d +) / $ 1 + 1 / ge' hiçbir şeyi değiştirmez
Tiberiu C.

-2

Pero'nun cevabı beni buraya getirdi :)

Görüntü izleyicileri görüntüleri zaman sırasına göre görüntülemediğinden dosyaları zamana göre yeniden adlandırmak istedim.

ls -tr *.jpg | # list jpegs relative to time
gawk 'BEGIN{ a=1 }{ printf "mv %s %04d.jpg\n", $0, a++ }' | # build mv command
bash # run that command

2
Bunu KULLANMAYIN. Bu şekilde bash'a yönlendirmek büyük bir güvenlik riskidir. Dosya adlarından biri formdaysa ne olur blahblah; rm -r * blahblah.jpg? Sadece aşırı bir örnek.
xhienne


-3

6000 dosyasını yeniden adlandırmak için, bir klasördeki dosyalar ACDsee programının 'Yeniden Adlandır' seçeneğini kullanabilirsiniz.

Bir önek tanımlamak için şu biçimi kullanın: ####"*"

Ardından başlangıç ​​numarasını ayarlayın ve Yeniden Adlandır'a basın; program 6000 dosyanın tümünü sıralı numaralarla yeniden adlandırır.


1
OP, Unix Bourne Shell'de bir dizi komut ister. Yalnızca Windows ortamında çalışan ticari bir ürün öneriyorsunuz.
xhienne
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.