
Puedo hacer esto en secuencias de comandos CMD de Windows, pero ahora estoy ingresando a Debian a través de Raspberry Pi.
Lo que me gustaría hacer es...
(En la carpeta actual)
- Para cada subcarpeta...
- Cree un archivo llamado nombres_de_archivo_originales.txt
- Repita el nombre de la carpeta en este original_filenames.txt
- Enumere todos los archivos (incluidas las subcarpetas) en original_filenames.txt
Respuesta1
Usando 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, de forma recursiva, en ese directorio. Esta salida va al original_filenames.txt
archivo en el directorio.
Corta:
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 desea las rutas de los archivos normales, utilice find
with -type f
después del nombre del directorio.
Tenga en cuenta que si está planeandousandoSi genera archivos de salida para cualquier cosa, esto fallará (o al menos será muy problemático) si alguno de los nombres de ruta encontrados contiene nuevas líneas (lo cual es completamente posible en un sistema Unix).
Respuesta2
Podrías hacer esto con el find
comando y la exec
opción, 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: