Bash-скрипт для циклического просмотра папок и преобразования файлов в текст

Вам действительно следует исправить сломанную программу, но если вы не можете, вы можете обойти это, заставив оболочку перехватить файл и передать его программе, затем поспать секунду или две перед выходом, таким образом закрывая трубу и убивая программу с помощью SIGPIPE.

(cat file ; sleep 2) | stupid_program
1
15.04.2019, 20:37
2 ответа

Podrías hacer esto con el comando findy la opción exec-algo como esto:

find. -type d \( ! -name. \) -exec bash -c '
    dirname=$(basename "{}") && 
    cd "{}" && 
    echo "{}" > original_filenames.txt && 
    ls | grep -Fv original_filenames.txt >> original_filenames.txt
' \;

Aquí hay una publicación de StackOverflow que puede resultarle útil:

0
27.01.2020, 23:32

Uso de un bucle de shell:

for dir in */; do
    { printf '%s\n' "$dir"
      ( cd "$dir" && find. )
    } >"$dir/original_filenames.txt"
done

Esto itera sobre todos los subdirectorios en el directorio actual. El cuerpo del bucle genera el nombre del directorio y luego una lista de todos los archivos y directorios, recursivamente, en ese directorio. Esta salida va al archivo original_filenames.txten el directorio.

Más corto:

for dir in */; do
    find "$dir" >"$dir/original_filenames.txt"
done

Esto da un resultado ligeramente diferente en el sentido de que todos los nombres de ruta que se escriben en el archivo comienzan con el nombre de la subcarpeta.

Si no está interesado en los nombres de los directorios y solo quiere las rutas de los archivos normales, use findcon -type fdespués del nombre del directorio.


Tenga en cuenta que si está planeando usar para generar archivos de salida para cualquier cosa, esto fallará (o al menos será muy problemático )si alguno de los nombres de ruta encontrados contiene saltos de línea (que es totalmente posible en un sistema Unix ).

2
27.01.2020, 23:32

Теги

Похожие вопросы