OS / X поставляется с zsh
, поэтому вместо этого вы можете написать свой сценарий в zsh
(обратите внимание, что вы уже использовали zsh
] (поскольку ваш $ i
не цитируется, что вызывает оператор split + glob в bash
):
for x in {00..06}; do
echo $x
done
Posixly, вы всегда можете сделать:
x=0; while [ "$x" -le 6 ]; do
printf '%02d\n' "$x"
x=$((x + 1))
done
или
seq() (first=$1 last=$2 width=${3:-0} step=${4:-1}
awk "BEGIN{for (i = $first; i <= $last; i += $step)
printf \"%0${width}d\n\", i}"
)
unset -v IFS # make sure we get the default separator
# for the split+glob invocation below
for i in $(seq 0 6 2); do
echo "$i"
done
Sí, find
funciona con nombres de rutas, no con nombres de archivos.
Hay dos soluciones inmediatas:
Puede extraer la parte del nombre de archivo de la ruta y usarla en la ruta de destino utilizada por mv
.
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \
-maxdepth 1 -type d -mtime +1 \
-name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \
-exec sh -c 'mv "$1" "/Users/myname/Desktop/backups/trash/${1##*/}_renamed"' sh {} ';'
Aquí, ${1##*/}
es lo mismo que $( basename "$1" )
, y $1
es el nombre de ruta dado al script sh -c
por find
.
Podría usar -execdir
en lugar de -exec
si su implementación find
lo admite. Con -execdir
, el comando dado se ejecuta en la carpeta principal del elemento encontrado, y {}
será el nombre base del elemento (con BSDfind
)o el nombre base con el prefijo./
(con GNUfind
).
find /Users/myname/Desktop/backups/websites/testwebsite.co.uk \
-maxdepth 1 -type d -mtime +1 \
-name '[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9]' \
-execdir mv {} /Users/myname/Desktop/backups/trash/{}_renamed ';'
Relacionado: