Portál AbcLinuxu, 12. května 2025 11:35
find -name xxx -exec mv {} yyy\;
jste zkousel?
deb http://ftp.cz.debian.org/debian jessie main contrib non-free
ls -1 | while read FILE ; do NEWFILE=$(echo $FILE | sed -e 's/\(.*\);1/\1/g') ; mv $FILE $NEWFILE ; doneNeresi to stavy kdy by byly dva soubory velmi podobneho jmena v jednom adresari atd. Mimochodem, co to ma spolecneho s rekurzi?
#!/usr/bin/env bash
var=`find /prohledavany/adresar -name '*\;1' -print`
for i in "$var"; do
mv "$i" ${i%;1}
done
;1
zakončené i adresáře. Zkusil bych něco jako:files=`find . -name '*\;1' -print | sed 's/\n/\ /g'` for i in $files; do mv "$i" "`echo "$i" |sed "s/;1//g"`"; done
find /adresar -type f -exec bash -c 'mv "$0" "${0%;1}"' '{}' \;Vysvetleni: Find pres volbu -exec spusti bash a preda mu 3 parametry: (1) -c, (2) mv "$0" "${0%;1}" a (3) jmeno souboru. Bash podle volby -c pozna, ze ma argument (2) interpretovat jako seznam prikazu. Argument (3) vlozi Bash do promenne $0. Seznam prikazu (argument (2)) pak uz jen pouzije promennou $0. Pokud tam vidite nejakou chybu, tak to opravte. Normalni lidi pouzivaji neco jako
find /adresar -type f -exec ./prejmenuj '{}' \;kde prejmenuj je napr.
#!/bin/bash mv "$1" "${1%;1}"ale me to po tech zhavych psech nedalo, a ten skript jsem vecpal do jednoho radku.
find /adresar -type f -exec bash -c 'echo mv _"$0"_ _"${0%;1}"_' '{}' \;(Podtrzitka jsou tam proto, aby bylo videt, kde zacinaji a konci jednotlive argumenty.) Tyhle "zhustene" prikazy sice vypadaji cool, ale pokud se clovek splete, tak muze natropit hodne skody.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.