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
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?
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
Tags shell-script