Cómo crear un nuevo archivo que proporciona el nombre del archivo y la información del directorio de origen

Cómo crear un nuevo archivo que proporciona el nombre del archivo y la información del directorio de origen

Tengo un directorio que contiene tantos subdirectorios y archivos. Me gustaría crear un archivo que proporcione el nombre de cada archivo y la información de la ruta del directorio de origen.

Por ejemplo:

  • Tengo un nombre de carpeta de muestra que contiene los subdirectorios sample1 y sample2.
  • Tengo ex1.csv, ex2.csv en el directorio de muestra 1 y ex3.csv, ex4.csv en el directorio de muestra 2

Necesito crear un archivo de texto (o) un archivo csv que brinde la información de la siguiente manera

ex1.csv,muestra/muestra1

ex2.csv,muestra/muestra1

ex3.csv,muestra/muestra2

Sería genial si alguien me ayudara a crear el archivo de script en Unix.

gracias de antemano

Respuesta1

Dada una estructura como

$ tree sample
sample
├── sample1
│   ├── ex1.csv
│   └── ex2.csv
└── sample2
    ├── ex3.csv
    └── ex4.csv

2 directories, 4 files

puedes usar

$ find sample -type f -printf '%f,%h\n'
ex2.csv,sample/sample1
ex1.csv,sample/sample1
ex3.csv,sample/sample2
ex4.csv,sample/sample2

A partir de , los especificadores de formato man findrelevantes son-printf

       %f     File's  name  with  any leading directories removed (only
              the last element).

       %h     Leading directories of file's name (all but the last ele‐
              ment).  If the file name contains no slashes (since it is
              in the current directory) the  %h  specifier  expands  to
              ".".

Si desea los resultados en un archivo, simplemente redirija la salida del comando usando el >operador, por ejemplo

find sample -type f -printf '%f,%h\n' > filelist

información relacionada