Como localizar e imprimir caminhos de arquivos específicos com exclusões?

2

Meta: Saída do arquivo .txt com o caminho completo do diretório, incluindo o nome de todos os arquivos .html exceto para aqueles com "txt "ou" texto "no nome do arquivo .html.

Descobri que a linha a seguir me fornece o arquivo .txt desejado com o caminho completo do diretório do arquivo. O único problema é que ele me dá TODO o conteúdo da pasta:

ls -d "$PWD"/* > fileList.txt

Exemplo de resultados:

/Users/username/Desktop/WebsiteFiles/notes.txt
/Users/username/Desktop/WebsiteFiles/index.html
/Users/username/Desktop/WebsiteFiles/index-TEXT.html
/Users/username/Desktop/WebsiteFiles/answers.html
/Users/username/Desktop/WebsiteFiles/answers_txt.html
/Users/username/Desktop/WebsiteFiles/image.jpg
/Users/username/Desktop/WebsiteFiles/image2.jpg
/Users/username/Desktop/WebsiteFiles/about.html
/Users/username/Desktop/WebsiteFiles/about_TXT.html
/Users/username/Desktop/WebsiteFiles/contact.html
/Users/username/Desktop/WebsiteFiles/contact_text.html
/Users/username/Desktop/WebsiteFiles/images

Resultados desejados:

/Users/username/Desktop/WebsiteFiles/index.html
/Users/username/Desktop/WebsiteFiles/answers.html
/Users/username/Desktop/WebsiteFiles/about.html
/Users/username/Desktop/WebsiteFiles/contact.html

Experimentação:

Eu sou relativamente novo em usar a linha de comando. Eu tenho experimentado tentando descobrir essas coisas. Descobri que o seguinte find ajuda a encontrar todos os arquivos .html:

find . -iname '*.html' 

Quando usado no diretório pai, ele me fornecerá todos os arquivos .html, mas não o caminho completo do diretório, exemplo:

./index.html
./index-TEXT.html
./answers.html
./answers_txt.html
./about.html
./about_TXT.html
./contact.html
./contact_text.html

Não estou familiarizado o suficiente com os parâmetros ou montando esses comandos e não consegui obter uma impressão apenas dos arquivos .html sem os que possuem qualquer variação de "texto" no nome.

Eu tenho um tonelada de arquivos para encontrar com isso e preciso desse arquivo .txt com os caminhos completos. Eu quero entender essas coisas, então, por favor, forneça respostas detalhadas!

    
por Melissa McCollum 26.09.2017 / 17:32

1 resposta

2

find irá mostrar os nomes encontrados com o caminho que você deu, então você pode começar a construir o comando com

find /Users/username/Desktop/WebsiteFiles

ou, se é onde você está atualmente,

find "$PWD"

Em seguida, restringimos os nomes encontrados apenas aos nomes que correspondem a *.html :

find "$PWD" -type f -name '*.html'

Se você tiver os arquivos *.html e *.HTML (ou *.hTmL ), e se quiser incluí-los, altere -name para -iname (que corresponde a nomes sem distinção entre maiúsculas e minúsculas). / p>

Eu também adicionei -type f na chance de ter diretórios com nomes correspondentes a *.html (não queremos ver isso no resultado). -type f restringe o nome apenas aos arquivos regulares.

Então você queria remover nomes de arquivos específicos do resultado. Nomes contendo as strings txt ou text (maiúsculas ou minúsculas). Isso pode ser feito negando o teste -iname com ! :

find "$PWD" -type f -name '*.html' ! -iname "*txt*" ! -iname "*text*"

E você tem isso.

Cada "predicado" ( -type f etc.) age como um teste contra os nomes no diretório determinado, e há um AND lógico implícito entre os testes. Se todos os testes forem aprovados, o nome será impresso.

Executando em um diretório temporário em minha máquina, com os arquivos que você tem em seu diretório (apenas arquivos vazios para teste):

$ ls -l
total 24
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 about.html
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 about_TXT.html
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 answers.html
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 answers_txt.html
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 contact.html
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 contact_text.html
-rw-r--r--  1 kk  wheel    596 Sep 26 17:46 files
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 image.jpg
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 image2.jpg
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 images
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 index-TEXT.html
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 index.html
-rw-r--r--  1 kk  wheel      0 Sep 26 17:47 notes.txt
-rw-r--r--  1 kk  wheel  10240 Sep 26 19:11 test.tar

$ find "$PWD" -type f -name '*.html' ! -iname "*txt*" ! -iname "*text*"
/tmp/shell-ksh.p56GA7BA/index.html
/tmp/shell-ksh.p56GA7BA/answers.html
/tmp/shell-ksh.p56GA7BA/about.html
/tmp/shell-ksh.p56GA7BA/contact.html
    
por 26.09.2017 / 17:39

Tags