One-liner Perl:
find . -name '*.jpg'|perl -nle 's/\.jpg//;unless(-f "$_.tif"){print "$_.jpg"}'
Em 63 caracteres:
find . -name '*.jpg'|perl -pnle 's/.jpg//;-f "$_.tif"||"$_.jpg"'
Eu preciso criar as versões TIF e JPG de um grande conjunto de imagens.
Todas as imagens JPG já existem, mas apenas uma parte das imagens TIF. Existe uma maneira fácil de pesquisar um diretório para encontrar todos os arquivos JPG que não têm nenhum arquivo TIF correspondente (por exemplo, um arquivo com o mesmo nome, mas com extensão de arquivo diferente)?
Supondo que todas as imagens estejam no diretório images
e possua o sufixo .jpg
, o script a seguir imprimirá todos os arquivos de imagem que não tiverem arquivo .tif
correspondente no UNIX:
#!/bin/sh
find images/ -type f -name "*.jpg" |
while read j; do
t=${j%.jpg}.tif
if [ ! -f "$t" ]; then
echo "Lacking tif file: " $j
fi
done
Cole-o em um arquivo e salve-o em uma pasta acima daquela em que suas imagens estão armazenadas. Você poderia chamá-lo de find-images
. Por exemplo:
├── find-images
└── images/
├── 1.jpg
└── 2.jpg
└── ...
Agora, abra Utilities / Terminal.app e use o comando cd
para navegar até a pasta em que seu script está, por exemplo, Se o script estiver na sua área de trabalho, basta digitar cd Desktop
.
Em seguida, insira chmod +x find-images
. Agora você pode executar o script apenas chamando ./find-images
.
Eu vou usar Python, já que é multi-plataforma. Primeiro, coloque seus arquivos jpg e tif em pastas separadas.
import os
jpgPath = "path/to/jpgs/folder"
tifPath = "path/to/tifs/folder"
jpgList = [item.rsplit(".", 1)[0] for item in os.listdir(jpgPath)]
tifList = [item.rsplit(".", 1)[0] for item in os.listdir(tifPath)]
diffList = [item for item in jpgList if item not in tifList]
print diffList
Em seguida, salve esse script em um arquivo, em algum lugar no disco rígido, talvez sob o nome find-images
.
Agora, abra Utilities / Terminal.app e digite python /path/to/file
. Por exemplo, se você salvou na sua área de trabalho, seria python ~/Desktop/find-images
(pois ~
é um atalho para sua pasta pessoal). Aqui, você pode executar uma explicação mais detalhada sobre a execução de arquivos Python no seu Mac.
Ah, eu senti vontade de adicionar isso. Aqui está a solução em Ruby, que imprime todas as imagens que não têm contraparte TIF:
jpg = Dir["*.jpg"]
tif = Dir["*.tif"]
[jpg, tif].each { |a| a.map!{ |f| f[0..-5]} }
puts jpg - tif
Coloque-o em um arquivo que resida na mesma pasta das imagens, salve-o como find-images
e execute-o no Terminal inserindo ruby find-images
.
Se você não conhece o Ruby, não pergunte como funciona, pode demorar um pouco para explicar: P
#!/bin/bash
found1=$(find "$PWD" -name "*.$1")
found2=$(find "$PWD" -name "*.$2")
export IFS=$'\n'
for f1 in "$found1"; do
base1=${f1##/}
for f2 in "$found2"; do
base2=${f2##/}
[[ ${base1%.$1} == ${base2%.$2} ]] && continue 2
done
echo "$f1"
done
cd somedir; diffext jpg tif
Um-liner (s) sem perl:
Com o uso de loop while após a localização:
find . -name '*.jpg' | while read file ; do test ! -f 'dirname $file'/'basename $file .jpg'.tif && echo $file; done
Com o uso de (muitas) subpastas:
find . -name '*.jpg' -exec sh -c 'test ! -f 'echo {} |sed s/\.jpg$/.flac/' && echo {}' \;
Tags macos shell-script