Cria uma lista de pastas com final correspondente (mas não idêntico)

3

Eu tenho um diretório que contém pastas que terminam em .ctpre ou .ctpost (por exemplo, "15.ctpre"), junto com outros arquivos / pastas. Quero criar uma lista que inclua apenas assuntos com pastas anteriores e posteriores, e só quero manter o ID do assunto correspondente (por exemplo, "15").

Aqui está o código que tenho agora:

#Make a list of folders that include .ct
find *.ct* -maxdepth 0 -fprint temp1
#In this list, remove the .ctpre and .ctpost extensions
sed 's/.ctpre//' temp1 > temp2
sed 's/.ctpost//' temp2 > temp3
#Sort the list
sort temp3 > temp4
#Print/save only duplicate entries on the list
uniq -d temp4 > sub_list
#Delete temp files
rm temp1 | rm temp2 | rm temp3 | rm temp4

Existe uma maneira mais eficiente de fazer isso?

    
por Brent Womble 06.02.2015 / 21:27

1 resposta

5

Todo o seu script em uma linha

for file in *.ctp{ost,re} ; do echo ${file%.*} ; done | sort | uniq -d > sub_list

Ou (graças a drewbenn para comentários)

for f in *.ctpre; do [ -d ${f%.*}.ctpost ] && echo ${f%.*} ; done > sub_list
    
por 06.02.2015 / 21:46