Komut satırını kullanarak birden fazla dosyayı kolayca nasıl yeniden adlandırabilirim?


103

Windows'ta dosyaları hızla yeniden adlandırmamın yollarından biri

F2 > Rename > Tab (to next file) > Rename ...

Fakat Ubuntu / Nautilus'ta bir sonraki dosyaya sekemiyorum. Ancak Linux'ta olmak, alternatif bir komut satırı olması gerektiğini düşünüyorum.

Ancak, bazen, belirli dosyaların nasıl yeniden adlandırılacağı üzerinde daha fazla kontrol sahibi olmak isteyebilirim. Bu durumda, belki bir sonraki dosyaya geçebilmek daha iyidir.


1
"Daha fazla kontrol" tanımlayabilir misiniz? Tam olarak ne istediğinden emin değilim ..
Dang Khoa

Bence bu soru cevaplanmadı. Ne istediğinizi (F2 ve ardından F2 modunda sonraki dosyaya atlayın) şu anda kullanılamıyor Nautilus'ta olduğunu düşünüyorum.
don.joey,

Yanıtlar:


188

Ben renameher zaman kullanırım. Oldukça basit, ama umarım temel regex'i biliyorsunuzdur:

rename "s/SEARCH/REPLACE/g"  *

Bu dizeyi yerini alacak SEARCHolan REPLACE(yani, her dosyada *). /gEğer bir olsaydı bu yüzden araçlarının küresel, SEARCH_SEARCH.jpgbu yeniden adlandırılır REPLACE_REPLACE.jpg. Eğer olmasaydı /g, sadece bir defa ikame yapılır ve böylece artık atayacağını REPLACE_SEARCH.jpg. Büyük / küçük harf duyarlı olmasını istiyorsanız, ekleyin /i(bu, /giya /igda sonunda olur).

Düzenli ifadelerle daha fazlasını yapabilirsiniz.

Bunun rename, tam Perl düzenli ifadelerini destekleyen prename(aka Perl rename) komutudur. Başka var renamekalıplarını kullanır ve güçlü olmadığı. prenameUbuntu’da (Perl ile birlikte) varsayılan olarak kurulmuştu, ancak şimdi yapmanız gerekebilir:

sudo apt install rename

İşte birkaç örnek:

Önek

Ekle :

rename 's/^/MyPrefix_/' * 
  • document.pdf yeniden adlandırıldı MyPrefix_document.pdf

Kaldır :

Ayrıca istenmeyen dizeleri kaldırabilirsiniz. Diyelim ki şöyle bir MP3 dosyası vardı CD RIP 01 Song.mp3ve “CD RIP” bölümünü silmek istediniz ve hepsini bir komutla silmek istediğinizi varsayalım .

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 için 01 Song.mp3

Fazladan boşluk olduğuna dikkat edin, boşluk '^CD RIP 'olmadan tüm dosyalar dosyanın ilk karakteri olarak boşluk bırakacaktır. Ayrıca, bunun ^karakter olmadan çalışacağını ancak CD RIP dosya adının herhangi bir bölümünde eşleşeceğini unutmayın . ^Onlar dosyanın başlangıcı olup olmadığını garanti yalnızca karakterleri kaldırır.

sonek

Ekle :

rename 's/$/_MySuffix/' *
  • document.pdf yeniden adlandırıldı document.pdf_MySuffix

Değiştir :

rename 's/\.pdf$/.doc/' *

Something.pdfiçine değişecek Something.doc. (Ters eğik çizginin sebebi, .regexp içindeki bir joker karakterdir, bu nedenle .pdfeşleşir qPDFancak \.pdftam dize ile eşleşir .pdf. BASH'ye aşina değilseniz, SINGLE tırnaklarına ters eğik çizgi koymanız gerekir! veya çift tırnak işareti kullanın, aksi halde bash bunları çevirmeye çalışır. Bash \. ve "\." eşittir .. (Ancak çift tırnak ve ters eğik çizgi kullanılır, örneğin yeni bir satır için "\ n", ancak "\."geçerli bir geri dönüş dizisi olmadığından çevirir .)

Aslında, dizenin bölümlerini bütün yerine tırnak işaretleri içine alabilirsiniz: 's/Search/Replace/g'aynı s/'Search'/'Replace'/gve s/Search/Replace/gBASH ile aynıdır . Sadece özel karakterler (ve boşluklar) konusunda dikkatli olmalısınız.


-nOlumlu olmadığınızda, doğru düzenli ifadelere sahip olmanız seçeneğini tercih etmenizi öneririm . Neyin yeniden adlandırılacağını gösterir, daha sonra yapmadan çıkar. Örneğin:

rename -n s/'One'/'Two'/g *

Bu, -nbayrağını oraya koymamış olsaydın, yapılacak tüm değişiklikleri listeler . İyi görünüyorsa, Upgeri gitmek için tuşuna basın , sonra silin -nve tuşuna basın Enter(veya -vyaptığı tüm değişiklikleri çıkarmak için ile değiştirin ).

Not : 17.04'ün üzerindeki Ubuntu sürümleri renamevarsayılan olarak gönderilmez, ancak yine de depolarda bulunur. sudo apt install renameYüklemek için kullanın


"Dinamik" bir sonekime nasıl sahip olacağım. 001 - 010 gibi. Mümkün mü?
Jiew Meng,

Hmm .. Bir şeyler yazmaya çalıştım ama işe yaramadı. Çoğunlukla, 1 ila 001 eklediğimde, 002'yi değil 2'ye ekler. Aksi halde, sayı konumunu tutmak için sadece değişkenleri kullanabilir, sonra eklerdim. Ayrıca, sadece hatırladım, renameemir hakkında bir şey bilmeden önce , bunu eklemek için yaptığım şey buydu:for f in *; do mv -v "$f" "prependThis$f"; done
Matt

2
@jiewmeng Evet. Desendinizde kullanın (?:\.[0-9]{3})$, pasif bir gruptaki tüm 3 basamaklı dosya uzantılarıyla eşleşir. Örnek: rename s/^my_favorite_movie.avi(?:\.[0-9]{3})$/random_movie.avi/ *. Bu regex kopya sayfasına bir göz atın .
sergio91pt

@ sergio91pt güzel bir regex kopya kağıdı. Ama neyle ilgili? Perl olmalı - ama orada böyle bir not bulamıyorum.
Adobe,

@Adobe "Perl tabanlı regex" için genel bir tanesidir. + İşaretiyle ilgili not ve POSIX Karakter Sınıfları ile ilgili sütuna bakın.
sergio91pt

21

Deneyin pyrenamer .

Nautilus ile entegre değildir, ancak işi halleder. İşte bir inceleme.

Thunar ( XFCE'nin bir parçası) ayrıca, ayrı ayrı çalıştırabileceğiniz bir yeniden adlandırıcıya sahiptir.

Thunar toplu yeniden adlandırma


2
Thunar'ın işlevselliğinden bahsettiğiniz için teşekkür ederiz. Eğer Thunar'ınız varsa - klasördeki dosyaları seçin ve F2 tuşuna basın.
Maksimum

9

Başlatma panelinde nautilus-renamer adlı bir proje var gibi görünüyor . make installKomut dosyasını indirip yeniden başlattıktan sonra çalıştırarak yükleyebilirsiniz . Bazı işlevlere sahip görünüyor ya da bazı programlama biliyorsanız, sadece bir python betiği olduğu için onu ihtiyacınıza göre geliştirebilirsiniz.

görüntü tanımını buraya girin


8

Komut satırında, tek bir dosyayı yeniden adlandırmak için komut sadece

mv file1.txt file2.txt

Toplu iş yapmak istiyorsanız, muhtemelen bir komut dosyası yoluyla yapmak isteyeceksiniz. Daha fazla ayrıntı verirseniz, ben veya bir başkası muhtemelen sizin için birini hazırlayabilir. Bununla birlikte, bir dosyaya malzeme eklemek için bir komut dosyası şöyle görünebilir:

#!/bin/bash
for file in *
do
    # separate the file name from its extension
    if [[ $file == *.* ]]; then
      ext="${file##*.}"
      fname="${file%.*}"
      mv "$file" "${fname}_APPENDSTUFFHERE.$ext"
    else
      mv "$file" "${file}_APPENDSTUFFHERE"
    fi
done

Yeniden adlandırılmış şeylere tam olarak nasıl ihtiyacınız olduğuna bağlı olarak, örneğin, izleyeceğiniz belirli yeniden adlandırma kurallarınız varsa, büyük olasılıkla tweaked olacaktır. (Şahsen bunu perl betiği ile yapardım çünkü bash-foo'm o kadar iyi değil, ama bu sadece benim.)

Önceden sorulan bir sorudan dosya adı ve uzantının ayrıldığını anladım .


7

Komut satırı olmadan yapmak isterseniz, Windows'ta yaptığınız gibi , sekme tuşu yerine sağ ok tuşunu kullanın . Bu, Windows'ta sekmede olduğu gibi bir sonraki dosyayı seçecektir.


Aynı değil: yeniden adlandırmayı tamamlamak için ENTER'a, bir sonraki dosyaya geçmek için ok tuşuna ve yeniden adlandırmak için F2'ye ihtiyacınız olacak. SEKME, bir dosyayı yeniden adlandırırken bir adımda yapar.
MestreLion

@MestreLion Ancak, soruda açıklanan algoritmaya çok benzer ve herhangi bir ek yazılım veya komut satırı işlemi gerektirmez. Kullanıcı dostu olmanın çeşitliliği.
Rafał Cieślak

Doğru, en azından asıl soru ile aynı yaklaşımı deneyen tek cevap sendin . Üzücü gerçek şu ki, Nautilus'un böyle bir işlevi yoktur. F2'yi yeniden adlandırabilirsin, ama bu kadar. Zaten yeniden adlandırma modunda sizi otomatik olarak bir sonraki dosyaya atlayacak TAB.
MestreLion

7

Gerçekten aynı soru değil Aynı anda birçok dosyayı nasıl yeniden adlandırabilirim? ancak bu cevapta önerdiğim programı önereceğim: qmv .

qmv, renameutils paketindeki kullanışlı bir araçtır. Dosyaları yeniden adlandırmak için favori metin düzenleyicinizi kullanmanızı sağlar. Vim gücü ile birlikte, mükemmel bir yeniden adlandırma programı var.

Genelde qmv -f dobir sürü dosyayı yeniden adlandırmak istediğim yerdeki gibi çağırırım. Ya da özyinelemeyle yeniden adlandırmak istersem qmv -R -f do.

Ne zaman birden fazla dosyayı yeniden adlandırmam gerektiğinde, her zaman qmv (ve vim) 'ye geri dönüyorum.

http://www.nongnu.org/renameutils/


Sadece önerinize dayanarak bunu denedim. Vim kullanıyorsanız, bu gerçekten en harika araçtır!
ste_kwr

3

Tek uygun seçenek dosyaları manuel olarak yeniden adlandırıyorsa, bunu kullanmanın harika bir yolu vidir( moreutilspakette):

sudo add-apt-repository universe && sudo apt-get update && sudo apt-get install moreutils
DESCRIPTION
       vidir allows editing of the contents of a directory in a text editor.
       If no directory is specified, the current directory is edited.

       When editing a directory, each item in the directory will appear on
       its own numbered line. These numbers are how vidir keeps track of what
       items are changed. Delete lines to remove files from the directory, or
       edit filenames to rename files. You can also switch pairs of numbers
       to swap filenames.

       Note that if "-" is specified as the directory to edit, it reads a
       list of filenames from stdin and displays those for editing.
       Alternatively, a list of files can be specified on the command line.

Örnekler


Seçmeli dosyaları yeniden adlandırma

Güncel çalışan direktörün içeriği:

.
├── bar
├── baz
└── foo

Koşmak vidir, yeniden adlandırmak istediğiniz dosya adlarını içeren satırlardaki dosya adlarını yeniden adlandırın; hit CTRL+ Ove CTRL+ X:

screenshot3

.
├── bar.bak
├── baz.old
└── foo.new

Seçici dosya isimlerinin değiştirilmesi

Güncel çalışan direktörün içeriği:

.
├── bar
├── baz
└── foo

Mevcut çalışan direktörün dosyalarının içeriği:

$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is bar

- baz:

This is baz

- foo:

This is foo

$ 

Koş vidir, değiştirmek istediğiniz dosya adlarını içeren satırlardaki sayıları değiştir; hit CTRL+ Ove CTRL+ X:

screenshot4

.
├── bar
├── baz
└── foo
$ for f in *; do printf '- %s:\n\n' "$f"; cat "$f"; echo; done
- bar:

This is foo

- baz:

This is bar

- foo:

This is baz

$ 

Dosyaları seçerek kaldırma

Güncel çalışan direktörün içeriği:

.
├── bar
├── baz
└── foo

Çalıştır vidir, silmek istediğiniz dosyaları içeren satırları kaldırın; hit CTRL+ Ove CTRL+ X:

screenshot2

.
└── baz

2

Ben krename kullanıyorum. Bu bir GUI uygulaması. Mp3 etiketleri okuyabilir ve benzeri.

Ayrı bir uygulama olarak Krusader'in bir parçası olarak var.

Ayrıca renamestandart perl kurulumunun bir parçası olan bir script de var (Muhtemelen yüklemişsindir). Şuna bir bak man rename.

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.