Vraag Hoe gemakkelijk bestanden hernoemen met behulp van de opdrachtregel?


Een van de manieren waarop ik de bestanden snel hernoem in Windows is

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

Maar in Ubuntu / Nautilus kan ik niet naar het volgende bestand tabelen. Maar omdat ik Linux gebruik, denk ik dat er een alternatief voor de opdrachtregel moet zijn.

Soms wil ik echter meer controle over hoe je specifieke bestanden kunt hernoemen. In dat geval is het misschien beter om naar het volgende bestand te kunnen gaan


95
2017-08-25 01:18


oorsprong


Zou je "meer controle" kunnen definiëren? Weet niet precies wat je precies vraagt ​​... - Dang Khoa
Ik denk dat deze vraag niet wordt beantwoord. Wat je vraagt ​​(F2 en dan in de F2-modus springt naar het volgende bestand) is momenteel niet beschikbaar denk ik in Nautilus. - don.joey


antwoorden:


ik gebruik rename altijd. Het is vrij eenvoudig, maar hopelijk ken je basic regex:

rename "s/SEARCH/REPLACE/g"  *

Dit zal de string vervangen SEARCH met REPLACE in elk bestand (dat wil zeggen, *). De /g betekent globaal, dus als u een SEARCH_SEARCH.jpg, het zou hernoemd worden REPLACE_REPLACE.jpg. Als je dat niet had gedaan /g, het zou slechts één keer substitutie hebben gedaan, en dus nu genoemd REPLACE_SEARCH.jpg. Als je hoofdletterongevoelig wilt, voeg je toe /i (dat zou zijn, /gi of /ig aan het einde).

Met reguliere expressies kun je nog veel meer doen.

Merk op dat dit rename is de prename (ook bekend als Perl rename) opdracht, die volledige Perl-reguliere expressies ondersteunt. Er is een andere rename die patronen gebruikt en niet zo krachtig is. prename werd standaard op Ubuntu geïnstalleerd (samen met Perl), maar nu moet je misschien doen:

sudo apt install rename

Hier zijn een paar voorbeelden:

Voorvoegsel

Toevoegen:

rename 's/^/MyPrefix_/' * 
  • document.pdf hernoemd naar MyPrefix_document.pdf

Verwijderen:

Ook kunt u ongewenste strings verwijderen. Laten we zeggen dat je 20 MP3-bestanden had met de naam CD RIP 01 Song.mp3 en je wilde het "CD RIP" -gedeelte verwijderen, en je wilde dat allemaal verwijderen met één commando.

rename 's/^CD RIP //' *
  • CD RIP 01 Song.mp3 naar 01 Song.mp3 

Let op de extra ruimte in '^CD RIP ', zonder de spatie zouden alle bestanden een spatie hebben als het eerste teken van het bestand. Merk ook op dat dit werkt zonder de ^ karakter, maar zou overeenkomen CD RIP  in een deel van de bestandsnaam. De ^ garandeert dat alleen de tekens worden verwijderd als ze het begin van het bestand zijn.

Achtervoegsel

Toevoegen:

rename 's/$/_MySuffix/' *
  • document.pdf hernoemd naar document.pdf_MySuffix

Verandering:

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

zal veranderen Something.pdf in Something.doc. (De reden voor de backslash is, . is een jokerteken in regexp dus .pdf wedstrijden qPDF terwijl \.pdf komt alleen overeen met de exacte string .pdf. Ook heel belangrijk om op te merken, als je niet bekend bent met BASH, moet je backslashes plaatsen in ENKELE citaten! Je mag geen citaten weglaten of dubbele aanhalingstekens gebruiken, of bash zal proberen ze te vertalen. Bash \.  en  "\." is gelijk aan .. (Maar dubbele aanhalingstekens en backslashes worden gebruikt, bijvoorbeeld "\ n" voor een nieuwe regel, maar sindsdien "\." is geen geldige back escape-reeks, het vertaalt zich in .)

Eigenlijk kun je zelfs de delen van de string tussen aanhalingstekens plaatsen in plaats van het geheel: 's/Search/Replace/g' is hetzelfde als s/'Search'/'Replace'/g en s/Search/Replace/g naar BASH. Je moet alleen voorzichtig zijn met speciale personages (en spaties).


Ik stel voor het gebruik van de -n optie als u niet positief bent, hebt u de juiste reguliere expressies. Het laat zien wat er zou worden hernoemd en gaat dan uit zonder het te doen. Bijvoorbeeld:

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

Hierin worden alle wijzigingen weergegeven die het zou hebben gemaakt, had u het niet geplaatst -nvlag daar. Als het er goed uitziet, drukt u op omhoog om terug te gaan, wis dan de -n en druk op invoeren (of vervang het door -v om alle veranderingen die het maakt uit te voeren).


172
2017-08-25 13:45



Hoe krijg ik een "dynamisch" achtervoegsel. Zoals 001 - 010 etc. Mogelijk? - Jiew Meng
Hmm .. Ik heb geprobeerd iets op te schrijven maar het werkte niet. Meestal omdat, wanneer ik er 1 tot 001 aan toevoeg, dit 2 toevoegt, niet 002. Anders zou ik gewoon variabelen kunnen gebruiken om de nummerpositie vast te houden en deze vervolgens toe te voegen. Ook herinnerde ik me net voordat ik het wist rename commmand, dit is wat ik deed om toe te voegen: for f in *; do mv -v "$f" "prependThis$f"; done - Matt
@jiewmeng Ja. Gebruik (?:\.[0-9]{3})$ in jouw patroon zal het alle 3-cijferige bestandsextensies in een passieve groep matchen. Voorbeeld: rename s/^my_favorite_movie.avi(?:\.[0-9]{3})$/random_movie.avi/ *. Kijk eens naar dit regex-spiekbriefje. - sergio91pt
@ sergio91pt het is een leuke regex-spiekbrief. Maar waar gaat het over? Moet perl zijn - maar een kan zo'n notitie daar niet vinden. - Adobe
@Adobe Het is een algemene voor "op perl gebaseerde regex". Kijk naar de opmerking over het + -teken en de kolom over POSIX-tekenklassen. - sergio91pt


Proberen pyrenamer.

Het is niet geïntegreerd met nautilus, maar het klopt. Hier is een recensie.

Thunar (deel van XFCE) heeft ook een hernoemer die u afzonderlijk kunt uitvoeren.

Thunar bulk renamer


21
2017-08-25 01:37



bedankt voor het noemen van Thunar-functionaliteit. Als u Thunar heeft: selecteer bestanden in de map en druk op F2. - Max


Er lijkt een project op het startpad te zijn genoemd nautilus-renamer. Je kunt het installeren door het uit te voeren make install zodra je het script hebt gedownload en het uitgepakt. Het lijkt een aantal functionaliteiten te hebben of, als je het weet, kan het zijn dat je het gewoon aan je behoefte kunt aanpassen, omdat het gewoon een pythonscript is.

enter image description here


9
2017-08-25 07:06





In de opdrachtregel is de opdracht eenvoudig om de naam van een enkel bestand te wijzigen

mv file1.txt file2.txt

Als je het in batch wilt doen, wil je het waarschijnlijk doen via een script. Als u meer details opgeeft, kan ik of iemand anders er waarschijnlijk een voor u op maken. Dat gezegd hebbende, kan een script om dingen aan een bestand toe te voegen er als volgt uitzien:

#!/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

Afhankelijk van hoe je de dingen precies hebt hernoemd, zal dit waarschijnlijk worden aangepast, bijvoorbeeld als je specifieke regels voor het wijzigen van de naamgeving moet volgen. (Persoonlijk zou ik dit doen via een Perl-script omdat mijn bash-foo niet zo geweldig is, maar dat ben ik gewoon.)

Merk op dat ik de scheiding van bestandsnaam en extensie heb gekregen van een eerder gestelde vraag.


8
2017-08-25 02:19





In het geval dat u het wilt doen zonder commandolijn, op dezelfde manier als wat u in Windows hebt gedaan, gebruik pijl naar rechts in plaats van Tab toets. Hiermee wordt het volgende bestand geselecteerd, net zoals het tabblad doet in Windows.


7
2017-08-25 15:13



Het is niet hetzelfde: je zou nog steeds ENTER nodig hebben om de naam te veranderen, de pijltjestoets om naar het volgende bestand te gaan en F2 om het te hernoemen. TAB doet het in 1 stap als je de naam van een bestand verandert. - MestreLion
@MestreLion Maar het lijkt erg op het algoritme dat in de vraag wordt beschreven en vereist geen extra software of opdrachtregelbewerkingen. Soort gebruikersvriendelijk zijn. - Rafał Cieślak
Toegegeven, jij was het enige antwoord dat tenminste beproefd dezelfde benadering als de oorspronkelijke vraag. En de trieste waarheid is dat Nautilus zo'n functionaliteit niet heeft. Je kunt F2 hernoemen, maar dat is het. Geen TAB om u automatisch naar het volgende bestand te laten springen in de hernoemmodus. - MestreLion


Niet echt dezelfde vraag als Hoe kan veel bestanden tegelijkertijd worden hernoemd? maar ik zal hetzelfde programma aanbevelen dat ik in dat antwoord heb voorgesteld: SGM.

qmv is een handig hulpmiddel uit het pakket renameutils. Hiermee kunt u uw favoriete teksteditor gebruiken om bestanden te hernoemen. Gecombineerd met de kracht van vim, heb je een uitstekend hulpprogramma voor hernoemen.

Ik roep het meestal op qmv -f do in de map waar ik een aantal bestanden wil hernoemen. Of als ik recursief wil hernoemen qmv -R -f do.

Wanneer ik de noodzaak heb om meerdere bestanden te hernoemen, val ik altijd terug op qmv (en vim).

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


7
2017-08-30 20:47



Ik probeerde dit gewoon op basis van je suggestie. Dit is echt het meest geweldige hulpmiddel als je vim gebruikt! - ste_kwr


Als de enige geschikte optie is om de bestanden handmatig te hernoemen, is een geweldige manier om dat te doen vidir (in de moreutils pakket):

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.

Voorbeelden


Bestanden selectief hernoemen

De inhoud van de huidige werkdirectory:

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

Rennen vidir, hernoem de bestandsnamen in de regels met de bestandsnamen die u wilt hernoemen; raken CTRL+O en CTRL+X:

screenshot3

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

Bestandsnamen selectief wijzigen

De inhoud van de huidige werkdirectory:

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

De inhoud van de bestanden van de huidige werkdirectory:

$ 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

$ 

Rennen vidir, verander de nummers in de regels met de bestandsnamen die u wilt omschakelen; raken CTRL+O en 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

$ 

Bestanden selectief verwijderen

De inhoud van de huidige werkdirectory:

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

Rennen vidir, verwijder de regels die de bestanden bevatten die u wilt verwijderen; raken CTRL+O en CTRL+X:

screenshot2

.
└── baz

3
2018-02-10 10:07





Ik gebruik Krename. Het is een GUI-app. Het kan mp3-tags lezen enzovoort.

Het bestaat als een afzonderlijke app en als onderdeel van Krusader.

Er is ook een rename script - dit is een onderdeel van de standaard perl-installatie (u hebt het waarschijnlijk wel geïnstalleerd). Bekijk het met man rename.


2
2017-08-25 06:49