GNU/Linux >> Znalost Linux >  >> Linux

Hromadné přejmenování souboru Bash pomocí čítače?

Chci přejmenovat všechny soubory ve složce pomocí PREFIX+COUNTER+FILENAME

například
vstup:

england.txt  
canada.txt  
france.txt

výstup:

CO_01_england.txt  
CO_02_canada.txt  
CO_03_france.txt

Přijatá odpověď:

Toto dělá to, co požadujete:

n=1; for f in *.txt; do mv "$f" "CO_$((n++))_$f"; done

Jak to funguje

  • n=1

    Tím se inicializuje proměnná n do 1.

  • for f in *.txt; do

    Tím se spustí smyčka přes všechny soubory v aktuálním adresáři, jejichž názvy končí .txt .

  • mv "$f" "CO_$((n++))_$f"

    Tím se přejmenují soubory tak, aby měly CO_ prefix s n jako počítadlo. ++ symbol říká bashovi, aby inkrementoval proměnnou n .

  • done

    To signalizuje konec smyčky.

Vylepšení

Tato verze používá printf což umožňuje větší kontrolu nad tím, jak bude číslo formátováno:

n=1; for f in *.txt; do mv "$f" "$(printf "CO_%02i_%s" "$n" "$f")"; ((n++)); done

Konkrétně %02i format vloží před číslo úvodní nulu, když n je stále jednomístný.


Linux
  1. Čtení řádků ze souboru s Bash:For vs. Zatímco?

  2. Pro smyčku s názvy souborů?

  3. Procházení obsahu souboru v Bash

  1. Jak nahradit mezery v názvech souborů pomocí bash skriptu

  2. echo text s novým řádkem v bash

  3. Nelze přejmenovat soubor, jehož název začíná pomlčkou

  1. Přejmenujte soubor v terminálu Linux

  2. Přidání časového razítka k názvu souboru s mv v BASH

  3. Spuštění bash skriptu nebo binárního c na souborovém systému s možností noexec