Como mover arquivos para o diretório recém-criado sob condição em shell / perl

2

Era uma bagunça de arquivos de música e diretório.

É necessário executar a operação abaixo em vários diretórios de uma só vez:

  1. Se o diretório contiver arquivos ".jpg", crie um novo diretório    "Capas" e mova esses arquivos para ele.
  2. Se o diretório não contiver arquivos ".jpg", não crie    Diretório "Covers"
  3. Se o diretório já contiver o diretório "Capas", não crie    Diretório "Covers"
por user1228191 03.03.2012 / 08:06

3 respostas

3

Em bash :

#!/bin/bash
shopt -s nullglob
for dir; do
    [[ -d $dir ]] || continue
    jpgs=( "${dir}"/*.jpg )
    if (( "${#jpgs[@]}" )); then
        [[ -d ${dir}/Covers ]] || mkdir "${dir}/Covers"
        # Avoiding race condition by not reusing the jpgs array
        for jpg in "${dir}"/*.jpg; do
            mv "$jpg" "${dir}/Covers"
        done
    fi
done
    
por 03.03.2012 / 11:27
2

Eu ainda sou um novato, mas aqui está o meu:

#!/bin/bash
current_directory=$(pwd)
#echo $current_directory
(find -maxdepth 1 -type d -name '*' ! -name '.*' -printf '%f\n')>filelist
number=$(find -maxdepth 1 -type d -name '*' ! -name '.*' -printf '%f\n' | wc -l)
for iteration in 'seq $number'
do
    fname=$(head -1 filelist)
    sed 1d < filelist > filelist2
    mv filelist2 filelist
    cd "$fname"
    if [ -z $(ls | grep -i jpg) ]
    then echo "Doing nothing as there are no JPG files....."
    else
        total=$(ls -l|grep -i jpg | wc -l)
        mkdir -p Covers
        mv *.jpg Covers
        echo "Moved $total JPG Files....."
    fi
    cd "$current_directory"
done  

Basta acessar o diretório principal de músicas e executar este script.

Não há necessidade de passar argumentos

EDIT: Foi desleixado antes. Está mais desleixado agora. Mas acho que vai funcionar.

    
por 03.03.2012 / 09:49
1
#!/bin/bash  

SAVEIFS=$IFS  
IFS="\n\b"  
#-----------------------------------------------------------------------------  

#work in current dir if work path was not provided  
[ $# -eq 0 ] && search_path="." || search_path="$1"  


# files to be moved, more extensions can be added  
wildcard="*[jpg|JPG]"  


move_jpg() {  
    # create "Covers" if it doesn't exist  
    [ -d "$1/Covers" ] && echo -n " ... " || { echo -n " ...create Covers ";   mkdir "$1/Covers" }  

    mv "$1/$wildcard" "$1/Covers/$wildcard"  
    echo "... files moved"  
}  



for d in "$search_path/*/"; do  

    echo -n "testing <$d>   "  

    [ -e "$d/$wildcard" ] && ${move_jpg "$d"} || echo "...Not found <$wildcard>"  

done  



#-----------------------------------------------------------------------------  
IFS=$SAVEIFS  
    
por 03.03.2012 / 10:12