Como criar um novo arquivo que forneça o nome do arquivo e suas informações de diretório de origem

Como criar um novo arquivo que forneça o nome do arquivo e suas informações de diretório de origem

Eu tenho um diretório que contém muitos subdiretórios e arquivos neles. Eu gostaria de criar um arquivo que forneça cada nome de arquivo e suas informações de caminho do diretório de origem

Por exemplo:

  • Eu tenho um nome de pasta sample que contém os subdiretórios sample1 e sample2
  • Eu tenho ex1.csv, ex2.csv na amostra 1 e ex3.csv, ex4.csv no diretório da amostra 2

Preciso criar um arquivo de texto (ou) arquivo csv que forneça as informações da seguinte maneira

ex1.csv, amostra/amostra1

ex2.csv, amostra/amostra1

ex3.csv, amostra/amostra2

Seria ótimo se alguém me ajudasse a criar o arquivo de script em unix

desde já, obrigado

Responder1

Dada uma estrutura como

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

2 directories, 4 files

você pode 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

De , os especificadores de formato man findrelevantes são-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
              ".".

Se você quiser os resultados em um arquivo, basta redirecionar a saída do comando usando o >operador, por exemplo

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

informação relacionada