ubuntu - bash - Terminal sed en el archivo .command

CorePress2023-09-17  1

Tengo este script para eliminar las primeras 4 líneas de cada archivo en una carpeta si su extensión es .txt.

Quiero poder colocar un archivo.command con este script en la misma carpeta para poder hacer doble clic en él y ejecutarlo.

Así que hice un archivo con esto:

#!/bin/bash

find . -type f -name "*.txt" -exec sed -i.bak '1,4d' {} \;

Si ejecuto el archivo, se eliminarán 4 líneas de todos mis archivos txt de Mac :(

Pensé en el hallazgo. estaba destinado a permanecer en la misma carpeta...

¿Cómo lo soluciono para que el comando se ejecute SÓLO en la carpeta donde se encuentra el archivo.command?

  • El mío funciona bien, intenta ejecutarlo con -max Depth 1 y elimina la parte sed para ver los archivos que se verán afectados - George Udosen 20 de septiembre de2017 a las 11:01
  • ¿Lo estás ejecutando desde la carpeta en cuestión? - George Udosen 20 de septiembre de 2017 a las 11:04
  • Hice el archivo en la misma carpeta que tengo los txts y hago doble clic en él - sí, la misma carpeta - Sr. Web 20 de septiembre de 2017 a las 11:06
  • Ejecute con -max Depth 1 y vea qué sucede - George Udosen 20 de septiembre de 2017 a las 11:08
  • Intenté buscar. -profundidad máxima 1 -tipo f-nombre "*.txt" -exec sed -i.bak '1,4d' {} \;pero no pasa nada.. - Sr. Web 20 de septiembre de 2017 a las 13:07


------------Respuesta------------

Este código:

find . -maxdepth 1 -type f -name "*.txt" -exec sed -i.bak '1,4d' {} \;

realmente funciona, el problema fue:

  1. El archivo creado con el comando no se hizo ejecutable para esa tarea:

    chmod +x file.command
    
  2. Luego ejecuta el comando desde la terminal con:

    ./file.command
    



------------Respuesta------------

Como se ha comentado, la búsqueda desciende a subdirectorios de forma predeterminada.

En su lugar, haz esto:

#!/bin/bash
cd "$(dirname "1008611")"          # change directory to the location of the script
for file in *.txt; do         # and iterate over the .txt files
    sed -i.bak '1,4d' "$file"
done