text-processing – Eliminar los primeros n bytes de archivos

Pregunta:

Tengo un problema extremo y todas las soluciones que puedo imaginar son complicadas. Según mi experiencia con UNIX / Linux, debe haber una manera fácil.

Quiero eliminar los primeros 31 bytes de cada archivo en /foo/ . Cada archivo es lo suficientemente largo. Bueno, estoy seguro de que alguien me ofrecerá una solución sorprendentemente fácil que no puedo imaginar. ¿Quizás awk?

Respuesta:

for file in /foo/*
do
  if [ -f "$file" ]
  then
    dd if="$file" of="$file.truncated" bs=31 skip=1 && mv "$file.truncated" "$file"
  fi
done

o más rápido, gracias a la sugerencia de Gilles:

for file in /foo/*
    do
      if [ -f $file ]
      then
        tail +32c $file > $file.truncated && mv $file.truncated $file
      fi
    done

Nota: La cola de Posix especifica "-c +32" en lugar de "+ 32c", pero la cola predeterminada de Solaris no le gusta:

   $ /usr/bin/tail -c +32 /tmp/foo > /tmp/foo1
    tail: cannot open input

/usr/xpg4/bin/tail está bien con ambas sintaxis.

Si desea conservar los permisos del archivo original, reemplace

... && mv "$file.truncated" "$file"

por

... && cat "$file.truncated" "$file" && rm "$file.truncated"

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım