É simples escrever um script de shell que faça um loop nos arquivos de um diretório e descubra se há arquivos com uma supercorda como nome em outro diretório.
#!/bin/sh
dirA=$1
dirB=$2
for x in "$dirA/"*; do
base_name="${x##*/}"
set -- "$dirB"/*"$base_name"*
if [ -e "$1" ]; then
for y; do
echo "$base_name found in B as ${y##*/}"
done
else
echo "$x not found in B"
fi
done
Isso é portátil para qualquer shell do tipo Bourne / POSIX ( sh , ash, bash, ksh,…). Algumas construções de shell usadas:
-
#!/bin/sh: a linha shebang no topo de cada script -
$1,$2: os dois argumentos para passar para o script, A e B -
${x##*/}é o valor dexmenos o prefixo mais longo do formulário*/, ou seja,$xmenos tudo até o último/, ou seja,${x##*/}é a parte de$xapós o último/. -
set -- "B/${x##*/}."*configura os parâmetros posicionais para a lista de arquivos correspondentes em B. Se não houver correspondências, o padrão será deixado não expandido, portanto, isso definirá o primeiro parâmetro posicional como uma sequência que termina em.*. -
for y; dofaz um loop sobre os parâmetros posicionais.