найти файлы в текущем каталоге, не в подкаталогах :
find . -maxdepth 1 -type f -name '*.zip' -exec mv -t "$target/" {} \;
метод исключения архивов :
find . -type f -not -path "$target/*" -name '*.zip' -exec mv -t "$target/" {} \;
Обратите внимание, что это исключит только сегодняшний архив, в то время как у вас будут другие архивы, я рекомендую использовать первую команду, или создавать архивные каталоги вне основного каталога!
1)for file; do
recorre los parámetros posicionales, es decir, los argumentos de la línea de comandos del script. Use for file in *; do
para recorrer los archivos en el directorio (o _*
para tomar solo los que tienen un prefijo de subrayado.)
2 )Puede usar ${file#_}
en lugar de ${file//_/}
para eliminar el guión bajo al principio del nombre del archivo. ${par#word}
elimina específicamente una parte desde el principio, y es una función estándar, a diferencia de ${par/pat/repl}
. Y, por supuesto, ${file//_}
eliminaría todas las barras diagonales (ya que usó una barra doble -), no solo la primera.
3 )al menos en Linux (GNU userland )y FreeBSD, puede usar mv -n
para pedirle que no sobrescriba ningún archivo. Por si acaso.
Entonces,
for file in _*; do
mv -n -- "$file" "${file#_}"
done
Estás terriblemente cerca:
for file in _*; do
if ! [[ -f "${file/_/}" ]]; then
mv "$file" "${file/_/}"
else
echo "Replacement for '$file' already exists; skipping.." 1>&2
fi
done
¿Por qué ${file/_/}
?Porque especificó un prefijo de subrayado. Entonces _file_name.ext
se convertirá en file_name.ext
. Con ${file//_/}
, _file_name.ext
se convertiría en filename.ext
.
Simplemente conprename
(Renombrar Perl )comando:
prename -n 's/^_//' _*
Puedes usar sed
for file in /some/path/*; do
if [ -f "$file" ]; then
mv "$file" `echo "$file" | sed 's*_**g'`
fi
done