DILL Directory в 3 каталогах

У меня есть каталог, содержащий около 24800 .mp4 файлов, как я могу разделить его на 4 каталога, соответствующих всем файлам, не сохраняя оригинальные файлы 24800 в одном каталоге? Есть ли какая-либо команда mv / move, чтобы сделать это?

0
задан 27 March 2021 в 11:27

3 ответа

Если в именах файлов нет системы, позволяющей перемещать части файлов с использованием подстановочных знаков, я бы использовал текстовые инструменты bash для создания списка файлов в текстовом файле:

ls > filelist.txt

затем разделите это в разных частях, затем для каждой части используйте sed , чтобы отредактировать каждую строку, чтобы она составляла команду перемещения, например

filename.mp3

становится

mv "filename.mp3" targetdir

Эти текстовые файлы затем могут быть получены из командной строки для автоматического выполнения каждой команды по перемещению файла в другую папку. Если, например, такой текстовый файл называется "part_1", то вы можете получить этот файл как:

. part_1

или

source part_1 

. В качестве альтернативы вы можете сделать такой файл, содержащий допустимые команды, исполняемым, и выполнить его. Тогда желательно добавить shebang ( #! / Bin / bash ) в качестве первой строки файла.

0
ответ дан 2 April 2021 в 05:23

Вы можете удалить / BIN / ECHO , когда вы чувствуете, что сценарий делает то, что вы ожидаете его делать

#!/bin/bash

a=(source/*)
for ((b=0, c=$((${#a[@]} / 4)),d=0; b < ${#a[@]}; b+=c)); do
    mkdir -p target/$((++d))
    printf %s\\0 "${a[@]:$b:$c}" | xargs -r -0 /bin/echo mv -t target/$d --
done
0
ответ дан 2 April 2021 в 05:23
#!/bin/bash

# Paste this to a file and make the file executable using chmod +x filename
# Run the script file like so ./filename or bash filename
# This will create 4 new directories in the current directory where you run the script
# It will move the files from the source directory to the new directories and split them equally ~

# Change source_dir/ below to the path of your source directory.
source_dir="source_dir/"


file_extension="mp4"
drectories=4
file_num="$(ls -l $source_dir | wc -l)"
max_files="$(($file_num/$drectories))"
max_files2="$max_files"
dir_num=1
i=0

mkdir -p new_dir"$dir_num"

for f in "$source_dir"*".$file_extension"
        do
        if (($dir_num == $drectories))
        then
        # Remove echo below when satisfied with output to do the actual moving
        echo mv "$f" new_dir"$dir_num"
        else
        (($i == $max_files2)) && ((dir_num++)) && max_files2="$(($max_files2+$max_files))" && mkdir -p new_dir"$dir_num"
        # Remove echo below when satisfied with output to do the actual moving
        echo mv "$f" new_dir"$dir_num"
        ((i++))
        fi
        done

0
ответ дан 2 April 2021 в 05:23

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

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