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
echo
da 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$i
não foi pré-inicializada. Você pode colocari=1;
antes defind
para 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: