Rychlým způsobem by bylo upravit název souboru tux tak, aby se váš příkaz move neshodoval.
Například:
mv Tux.png .Tux.png
mv * ~/somefolder
mv .Tux.png Tux.png
Vložte následující do svého .bashrc
shopt -s extglob
Rozšiřuje regexes. Poté můžete přesunout všechny soubory kromě jednoho pomocí
mv !(fileOne) ~/path/newFolder
Výjimky ve vztahu k ostatním příkazům
Všimněte si, že při kopírování adresářů nelze v názvu použít dopředný flash, jak bylo uvedeno ve vláknu Why extglob kromě breaking kromě podmínky?:
cp -r !(Backups.backupdb) /home/masi/Documents/
takže Backups.backupdb/
je zde před negací špatně a nepoužil bych ji ani při přesouvání adresářů kvůli riziku nesprávného použití než globs s jinými příkazy a případnými dalšími výjimkami.
Pokud používáte bash a máte extglob
sada možností shellu (což je obvykle případ):
mv ~/Linux/Old/!(Tux.png) ~/Linux/New/
Šel bych tradičním způsobem find &xargs:
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png -print0 |
xargs -0 mv -t ~/Linux/New
-maxdepth 1
způsobí, že nebude hledat rekurzivně. Pokud vám záleží pouze na souborech, můžete říct -type f
. -mindepth 1
nezahrnuje ~/Linux/Old
samotnou cestu do výsledku. Funguje s libovolnými názvy souborů, včetně těch, které obsahují vložené nové řádky.
Jeden komentář uvádí, že mv -t
volba je pravděpodobně rozšíření GNU. Pro systémy, které jej nemají
find ~/Linux/Old -maxdepth 1 -mindepth 1 -not -name Tux.png \
-exec mv '{}' ~/Linux/New \;