Как скопировать содержимое многих папок в одну?

У меня есть несколько музыкальных файлов в отдельных папках по имени исполнителя, которые я хочу скопировать в одно место, чтобы rhythmbox мог импортировать все файлы из одного места. Я видел простые программные решения для этого, но ни одного для Ubuntu. Есть предложения?

2
задан 11 February 2013 в 16:23

3 ответа

Чтобы переместить файлы, сделайте это:

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

Это работает так: первый / my / files / path - это место, куда вы хотите посмотреть , Часть, которая говорит / home / user / music , - это место, куда вы хотите переместить все файлы. Итак, позвольте нам сказать, что у вас есть вся музыка в вашей домашней папке в /home/jon/music и вы хотите переместить ее в home/jon/newmusic, а затем сделайте следующее:

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

Если она в одной и той же папке проезжайте пункт назначения и пункт назначения, тогда он сделает это очень быстро. Если он находится на другом жестком диске, например /media/jon/backup/music, то это будет зависеть от скорости жесткого диска.

Если вы предпочитаете копировать, а не перемещать файлы, вы должны использовать cp:

find /home/jon/music -iname "*.mp3" -exec cp {} /home/jon/newmusic \;
0
ответ дан 11 February 2013 в 16:23

Взял отсюда: http://ubuntuforums.org/showthread.php?t=1385966

НЕ СЛУЧАЙНО ДЕЛАЙТЕ ЭТО В ВАШЕЙ ДОМАШНЕЙ ПАПКЕ.

Перейдите в верхний каталог, содержащий все эти файлы, и выполните

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

В соответствии с man-страницей для поиска вам может понадобиться экранировать {}.

0
ответ дан 11 February 2013 в 16:23

Или, если вы предпочитаете сценарии:

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

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

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

# colors:
BLUE='\033[94m'
GREEN="\e[0;32m"
RED='\033[91m'
BLACK='\033[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 $1 in

        -n|--name)
            Name=$2; shift;;
        -d|--dest)
            destDir=$2; 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}"
0
ответ дан 11 February 2013 в 16:23

Другие вопросы по тегам:

Похожие вопросы: