É 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 dex
menos o prefixo mais longo do formulário*/
, ou seja,$x
menos tudo até o último/
, ou seja,${x##*/}
é a parte de$x
apó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; do
faz um loop sobre os parâmetros posicionais.