Como copiar o conteúdo de muitas pastas para um?

2

Eu tenho vários arquivos de música, todos em pastas individuais, por nome de artista, que desejo copiar em um local, para que o rhythmbox possa importar todos os arquivos do local único. Eu vi soluções de programas simples para isso, mas nenhuma para o Ubuntu. Alguma sugestão?

    
por Jon 11.02.2013 / 05:56

3 respostas

2

Para mover os arquivos, faça o seguinte:

find /my/files/path -iname "*.mp3" -exec mv {} /home/user/music \;

Funciona assim, o primeiro / my / files / path é onde você quer procurar. A parte que diz / home / user / music é onde você deseja mover todos os arquivos. Então, digamos que você tenha todas as músicas dentro de sua pasta pessoal em /home/jon/music e queira movê-las para home/jon/newmusic e faça isso:

find /home/jon/music -iname "*.mp3" -exec mv {} /home/jon/newmusic \;

Se estiver na mesma unidade, a origem e o destino, será muito rápido. Se estiver em outro disco rígido como /media/jon/backup/music , isso dependerá da velocidade do disco rígido.

Se você preferir copiar em vez de mover os arquivos, você deve usar o cp:

find /home/jon/music -iname "*.mp3" -exec cp {} /home/jon/newmusic \;
    
por Luis Alvarado 11.02.2013 / 07:09
1

Adquiriu a partir daqui: link

NÃO FAÇA ACIDENTALMENTE ISSO NA PASTA DE CASA.

Mude para o diretório superior que contém todos esses arquivos e execute

find ./ -type f -exec cp '{}' ./ \;

De acordo com a página do manual para encontrar, talvez seja necessário escapar do {} também.

    
por Jack 11.02.2013 / 06:21
0

Ou se preferir scripts:

#!/bin/bash
# to get description use the -h flag

# ==========
# preambula:

PROGNAME=${0##*/}
PROGVERSION=1.0
Name="*"
destDir='basename ${0##*/} .bash'

# colors:
BLUE='3[94m'
GREEN="\e[0;32m"
RED='3[91m'
BLACK='3[0m'

usage()
{
cat << EO
Usage: $PROGNAME <folder>

Copies files matching rgxp (default to all files) from the current dir
and its child dirs to the specified dir (default to $destDir).

I recomment back-up files before running this script.

Options:
EO
cat <<EO | column -s\& -t

  -d, --dest & destination dir (default to $destDir)
  -n, --name & files-of-interest shell-style rgxp (default to $Name)
 
  -h, --help & show this output
  -v, --version & show version information
      --nocolors & disable colors in output. In case Your terminal doesn't support coloring and You get the output like \"\033[94mthis\" or Your terminal colors \"conflict\" with the output coloring"
EO
}

SHORTOPTS="hvn:d:"
LONGOPTS="help,version,nocolors,name:dest:"

ARGS=$(getopt -s bash --options $SHORTOPTS --longoptions $LONGOPTS --name $PROGNAME -- "$@")

eval set -- "$ARGS"

while true; do
    case  in

        -n|--name)
            Name=; shift;;
        -d|--dest)
            destDir=; shift;;

        -h|--help)
            usage; exit 0;;
        -v|--version)
            echo "$PROGVERSION"; exit 0;;
        --nocolors)
            noColors=true;;
        --)
            shift; break;;
        *)
            shift; break;;
    esac
    shift
done


# ===================
# finally the script:

# making a dir:
if [ -d "$destDir" ]; then
    rm -rf "$destDir"
fi
mkdir "$destDir"

# copying!
numberOfFiles=0
find . -type f -name "$Name" | {
while read fl; do
    echo -e "${RED}${PROGNAME}: ${GREEN}Copying \"$fl\" ..\c${BLACK}"
    cp "$fl" "$destDir/'basename "$fl"'"
    if [[ $? -eq 0 ]]; then
        echo " OK"
        numberOfFiles='expr $numberOfFiles + 1'
    fi
done
echo -e "${RED}${PROGNAME}: ${GREEN}$numberOfFiles files got copied to \"$destDir\"${BLACK}"
}


# ===========
## reporting:

echo -e "${RED}${PROGNAME}: ${GREEN}Done.${BLACK}"
    
por Adobe 11.02.2013 / 11:24