Aqui está um exemplo de script que os usuários find , cuja saída é canalizada para um while loop:
find "/mnt/TV Shows/" -type f -name "fanart.jpg" | while IFS= read -r item; do
NAME="${item##*/}"
echo cp "$item" "/mnt/Wallpapers/Slideshow/${NAME%.*}-$((i++)).${NAME##*.}"
done
-
Remova
echoda ação. -
O nome do arquivo de destino consistirá em:
${name of source file}-$((sequential number))-${extension of source file} -
A numeração começará em
0, porque a variável$inão foi pré-inicializada. Você pode colocari=1;antes defindpara começar a numeração de1.
Aqui está um script bash mais complicado que usa a opção globstart ** para fazer uma pesquisa recursiva de um arquivo dentro de uma pasta. Se houver uma coincidência, o arquivo será copiado para uma pasta de destino. Você pode escolher entre diferentes padrões do nome do arquivo de destino, alterando a parte interna (if-fi) do script.
#!/bin/bash
INPUT_PATH="/mnt/TV Shows"
INPUT_FILE_NAME="fanart.jpg"
OUTPUT_PATH="/mnt/Wallpapers/Slideshow"
shopt -s globstar
for item in "${INPUT_PATH}"/**; do
# If the item is a file and its name is equal to the INPUT_FILE_NAME
if [[ -f "$item" && "${item##*/}" == "$INPUT_FILE_NAME" ]]; then
# Compose OUTPUT_FILE name based on the parent directory name
INPUT_FILE_FULL_PATH="${item%/*}"
INPUT_FILE_PARENT_DIR="${INPUT_FILE_FULL_PATH##*/}"
OUTPUT_FILE_NAME="${INPUT_FILE_NAME%.*}-${INPUT_FILE_PARENT_DIR}.${INPUT_FILE_NAME##*.}"
# Remove 'echo' to execute the command !!!
echo cp "${item}" "${OUTPUT_PATH}/${OUTPUT_FILE_NAME}"
fi
done
Referências: