GNU/Linux >> Znalost Linux >  >> Linux

Linux mv soubor s dlouhým názvem

Řešení 1:

pro jeden soubor zkuste

mv dir1/dir2/dir3/file.{txt,txt.old}

kde X{a,b} konstrukt expand na Xa Xb , náhled můžete zobrazit pomocí

echo dir1/dir2/dir3/file.{txt,txt.old}

abyste zjistili, zda to vyhovuje vašim potřebám.

poznámka:

  1. to pro více souborů

    mv dir1/dir2/dir3/file{1,2,3}.{txt,txt.old}
    

je nepravděpodobné, že se rozšíří na to, co chcete. (to se rozšíří na směs soubor.txt soubor1.txt.starý soubor2.txt ...)

  1. {txt,txt.old} lze zkrátit na {,.old} podle komentáře

  2. pokud je název adresáře jednoznačný, lze použít zástupný znak.

    mv *1/*2/d*/*.{,old}
    

pro více souborů použijte rename

rename -n s/txt/old.txt/ dir1/dir2/dir3/file*.txt 

drop -n mít účinné přejmenování.

Řešení 2:

Příkaz rename přejmenuje všechny odpovídající soubory. Jeho hlavním účelem je přejmenovat více souborů, ale pokud výraz v Perlu odpovídá pouze jednomu souboru, přejmenuje pouze tento jediný soubor. Pro podrobnosti a specifickou syntaxi distribuce si prosím přečtěte manuálovou stránku:man rename .

Příklad použití:přejmenujte „/cesta/soubor.txt“ na „/cesta/soubor.txt.old“:

rename 's/file.txt/file.txt.old/g' /path/file.txt

Kratší zápis (díky shalombu):

rename 's/$/.old/' /path/file.txt
rename '$_.=".old"' /path/file.txt

Pro běh nasucho použijte rename -n .

Další příklady a podrobnosti lze nalézt na https://thepcspy.com/read/bulk-rename-files-in-ubuntu/

Řešení 3:

Líbí se mi řešení @archemar s použitím rozšíření {}, protože jej můžete použít, když jste již spustili příkazový řádek. Zde jsou některé další možnosti pro úplnost:

F="dir1/dir2/dir3/file.txt" ; mv "$F" "$F.old"

(uvozovky jsou nutné pouze v případě, že máte v názvu mezery nebo jiné znaky pro dělení slov)

mymv() {
    mv "$1/$2" "$1/$3"
}

mymv dir1/dir2/dir3 file.txt file.txt.old
mymv dir5/dir6/dir7 file.txt file.txt.old

Poznámky:

  • Toto je syntaxe bash, možná používáte jiný shell
  • mymv může být jakýkoli rozumný řetězec, použil jsem mymv pro "můj pohyb".
  • Definici funkce lze vložit do vašeho .bash_profile

Další:

cd dir1/dir2/dir3 ; mv file.txt file.txt.old ; cd -

ale

(cd dir1/dir2/dir3/ && exec mv file.txt file.txt.old)

(od @Adam a @CharlesDuffy) je pravděpodobně lepší v případě, že cd selže.

Řešení 4:

V jednorázovém případě, pokud nechci změnit svůj aktuální adresář, mohu použít pouze sub-shell:

(cd dir1/dir2/dir3/ && mv file.txt file.txt.old)

Protože vy cd uvnitř sub-shell jste nezměnili svůj adresář ve vašem skutečném shellu

Řešení 5:

Pokud chcete vstoupit do podadresáře za účelem zkrácení mv příkaz, ale chcete se poté vrátit do aktuálního adresáře, existují dva způsoby, jak to udělat. Jedním z nich je zadat cd a mv v subshell (jak již bylo navrženo).

Druhým je použití pushd a popd pro změnu adresářů:

pushd dir1/dir2/dir3/; mv file.txt file.txt.old; popd

pushd příkaz je jako cd , kromě toho, že nejprve vloží název aktuálního adresáře do zásobníku. popd odebere nejvyšší název ze zásobníku a změní se na tento adresář.


Linux
  1. Jak napsat soubor s C v Linuxu?

  2. Jak získat název souboru pouze pomocí Linuxu „najít“?

  3. Jak smazat soubor s tímto názvem na linuxu:-]???????q

  1. Přejmenujte soubor v terminálu Linux

  2. Jak v linuxu vidím du v GB místo MB?

  3. Šablony s Linuxem ve skriptu Shell?

  1. Zlepšete výkon systému Linux pomocí noatime

  2. Třídit příkaz v Linuxu s příklady

  3. Oprávnění souborů v Linuxu s příkladem