Como encontrar arquivos e agir sobre eles (find + exec)

1

Eu baixei cerca de 3200 sites para a profundidade 2. Então agora eu tenho uma pasta mestra (abc) que contém muitas pastas, contendo arquivos para cada site. Portanto, minha pasta abc contém 3200 pastas e cada pasta contém outras pastas que contém arquivos com texto dos sites. Eu também tenho um script que pode editar o texto em cada arquivo. Ele é armazenado no arquivo chamado lynx.sh:

#!/bin/bash
fileA=$1
while IFS= read -r lineA
do
LTRA=$(echo "${lineA:0:1}")
catA=$(lynx -dump -nonumbers -nomargins -nolist -noprint -width 1000 -assume_charset=utf-8 $2/*.* )
editA=$(echo "$catA" | sed -e 's/\[[^][]*\]//g')
editB=$(echo "$editA" | sed -e 's/\s\+/\n/g')
editC=$(echo "$editB" | sed '/^http/ d' )
editD=$(echo "$editC" | sed '/^IFRAME/ d' )
editE=$(echo "$editD" | sed 's/<[^>]*>//g' )
editF=$(echo "$editE" | sed -r 's/[^aáäbcčdďdzdžeéfghchiíjklĺľmnňoópqrŕsštťuúvwxyýzžAÁÄBCČDĎDZDŽEÉFGHCHIÍJKLĹĽMNŇOÓPQRŔSŠTŤUÚVWXYÝZŽ][^aáäbcčdďdzdžeéfghchiíjklĺľmnňoópqrŕsštťuúvwxyýzžAÁÄBCČDĎDZDŽEÉFGHCHIÍJKLĹĽMNŇOÓPQRŔSŠTŤUÚVWXYÝZŽ]+//g' )
editG=$(echo "$editF" | sed s'/[^aáäbcčdďdzdžeéfghchiíjklĺľmnňoópqrŕsštťuúvwxyýzžAÁÄBCČDĎDZDŽEÉFGHCHIÍJKLĹĽMNŇOÓPQRŔSŠTŤUÚVWXYÝZŽ]$//')
editH=$(echo "$editG" | sed s'/^[^aáäbcčdďdzdžeéfghchiíjklĺľmnňoópqrŕsštťuúvwxyýzžAÁÄBCČDĎDZDŽEÉFGHCHIÍJKLĹĽMNŇOÓPQRŔSŠTŤUÚVWXYÝZŽ]//')
editI=$(echo "$editH" | sed 's/ .*//')
editJ=$(echo "$editI" | sed '/^$/d' )
echo "$editJ" > $2/"blaaa"_lynx.txt
echo "$lineA"
done <"$fileA"

Faz com que o texto em cada arquivo seja editado - cada palavra está na nova linha. Eu usei este script muitas vezes antes, mas eu uso com o arquivo input.txt, que contém nomes de todos os sites que eu tenho.

Agora estou tentando editar todas as pastas da minha pasta abc de uma só vez. Eu tentei usar algo assim:

find /home/student/eny/abc -exec lynx.sh {} \;
find /home/student/eny/abc/* -iname -exec ./lynx.sh input.txt {} \;

e muitos outros. Não consigo encontrar uma solução para isso.

Em input.txt existem nomes de sites por exemplo: kosice.sk bratislava.sk presov.sk todos os nomes do site estão em uma nova linha e eles estão em ordem de ordem. E eles também são como nomes de dir do primeiro nível.

    
por eny 13.03.2016 / 23:49

1 resposta

0

Aqui está a versão final do seu comando

find /home/student/eny/abc -type f -exec ./lynx.sh {} \;

Pontos a serem observados:

  1. -type f encontra somente arquivos
  2. você deve especificar o caminho para o seu script ./ (barra de pontos) significa diretório atual, você pode querer especificar o caminho completo
  3. lynx.sh deve ter o modo de arquivo de conjunto de bits executável 0755 seria bom
por 01.04.2016 / 17:46