Parece que o x dentro do tamanho da imagem no nome poderia ser usado, então eu escreveria algo assim. procurando por qualquer arquivo que o nome não tenha o x usando uma substring então copie todos eles, deixando os outros sozinhos.
#!/bin/bash
typeset -i count
let count=0
MAXF="$(find /path -type f -name "*.*" | wc -l)"
find /path -type f -name "*.*" | while [[ $count -ne $MAXF ]] ;
do read FILENAME;
name=${FILENAME##*/}
substring="x"
if [[ "$name" != *"$substring"* ]] ; then
cp -v "$FILENAME" /path/newname
((count++))
fi
((count++))
done
Eu não testei isso ... é improvável, mas isso será configurado para concluir as outras coisas que você já tem em mente para fazer com seu pequeno projeto.
para esta parte da sua pergunta "Quando estas imagens são copiadas, é possível copiar a estrutura de pastas também?" é sim, mas pode se tornar um script complexo, se você estiver apenas lidando com alguns arquivos, e não todos eles em um structor semelhante, mas em um diretório pai diferente.
porque tem que estar em uma partição diferente ou em um nome de diretório pai para ter o mesmo structir subDirectory. aqui está um sniplet de um dos meus scripts que eu faço algo simluar nele.
Isso irá ajudá-lo a descobrir como usar variáveis e linha de comando e a lógica para fazê-lo. o ... indecate código antes disso estaria em vigor para que o resto deste código funcione corretamente. As três primeiras etapas configuram os caminhos dir para usar srtipt_dir. Isso pode não ser realmente necessário em seu script. Tudo depende de como e do que você está fazendo no script para torná-lo um item necessário. move_to pode ser alterado para copy_to.
esta é uma configuração de dois loops que estou usando, trabalhando em um diretório "base" Dir por vez, depois indo para todos os arquivos dentro desse diretório antes de passar para outro diretório "base" dentro de uma árvore e seus subdiretórios. Check-in em uma ramificação diferente do structor de árvore para ver se o mesmo nome de diretório já existe, se não, eu o movo para aquele novo branch fora da árvore, se é então eu copio o conteúdo do branch para aquele outro branch off o structor da árvore, em seguida, apaga tudo o que resta na antiga ramificação da árvore (dir structor).
use muito para checar seu trabalho antes de colocá-lo em ação
#!/bin/bash
script_dir="path"
files_dir="path"
move_to="path/dirName"
........
# if this is say /home/picures/myFotos
# then this statment will check the last dir name is there
# if it is not there. It will then create it.
# you will have to then take off of the old dir structor and
# recreate it off of this statement
if [[ ! -d "$move_to" ]] ; then
mkdir -v "$move_to"
fi
# set for 5th Directory to be Artist Dir
echo;echo
OldDirName=${DIRNAME#*/*/*/*/*/}
echo "1 - OldDirName $OldDirName"
echo
OldDirName=${OldDirName//\/*}
echo "2 - OldDirName $OldDirName"
echo
echo;echo "OldDirName : $OldDirName"
echo
# if no artist on file tag present then keep orginal DirName
if [ ! -z "$changeDirName" ] ; then
newDirName="$changeDirName"
else
#if no Artist MetaData
newDirName="$OldDirName"
fi
########### CHANGE NAME OF PARENT DIR WHERE IT IS AT FIRST
echo;echo "Old Dir Name != newDirName " echo "this is MP3Count - "$MP3Count""
echo;echo "[[ "$OldDirName" != "$newDirName" ]]"
if [[ "$OldDirName" != "$newDirName" ]] ; then
oldDirPathNewName=""$working_dir"/"$newDirName""
Dir="$newDirName"
echo;echo "oldDirPathNewName "$oldDirPathNewName""
echo ""$OldDirName" not = to "$newDirName""
#change name of dir to artist/band name
echo "mv "$OldDirName" to "$oldDirPathNewName""
#change old dir name to new dir name
#mv -v "$working_dir"/"$OldDirName" "$oldDirPathNewName"
mv -v "$working_dir"/"$OldDirName" "$oldDirPathNewName"
echo
else
Dir="$OldDirName"
fi
from=""$working_dir"/"$Dir""
to=""$move_to"/"$Dir""
#check if the desanation directory is already there if not move it or
# copy it into it then remove left overs
if [[ ! -d "$to" ]] ; then
#move_to"/"$Dir" ]] ; then
echo "inside ck if move to parent / artist to dir is there"
echo
echo ""$move_to"/"$Dir" is not there moving "$Dir""
echo
#then move the new dir name to a different
# place for safe keeping
echo
echo;echo "just befor move "
echo
echo
echo "$from -> $to"
mv -vf "$from" "$to"
echo
echo "DirIsaidtoDo Left : $DirIsaidtoDo"
echo
else
echo ""$move_to"/"$stringNewDir" is there moving within it into"
echo
echo "$move_to"/"$stringNewDir"
echo
echo
cp -Rv "${from}"/* "$to"
echo
rm -rv "$from"
echo
echo "DirIsaidtoDo Left : $DirIsaidtoDo"
echo
fi
fi
echo "********** NEXT FILE ***********************"
done
let DirCountDn++
echo "Dir Count Dn "$DirCountDn""
echo "******************************************"
let AmountDirs--
echo "Amount Dirs to go $AmountDirs"
echo
let DirIsaidtoDo--
echo;echo;echo
done #FOR DIR Names
para criar mais de um diretório em uma ordem de arrumação do caminho, isso cria todos os dirNames configurando um diretório pai e seu sub-diretório também
mkdir -pv path/dirName/DirName/DirName