Скопируйте определенное количество файлов из каталога в другой с помощью Linux

115
12

У меня есть каталог, содержащий файлы 8000+, и мне интересно, есть ли способ копировать их в другие каталоги, чтобы у меня было либо 8 каталогов с примерно 1000 файлами в них, либо в каждом из 4-х каталогов с файлами с 2000 файлами?

спросил(а) 2014-02-21T18:09:00+04:00 6 лет, 4 месяца назад
1
Решение
85

Чтобы продлить скрипт fedorqui, написанный в соответствии с вашими потребностями, вы можете сделать следующее:

создать файл,

$ nano mycopy.sh (вы можете выбрать свое имя)

вставьте следующее и сохраните файл:

source=$1
dir=1
counter=1

mkdir dir_$dir
for file in 'ls $source'
do
cp -r $source$file dir_$dir/
((counter++))
(( $counter%1000 == 1 )) && ((dir++)) && (('mkdir dir_$dir'))
done

сделать ваш файл исполняемым

$ chmod u+x mycopy.sh

теперь выполните скрипт, запустив

$ ./mycopy.sh MyDirectoryWithManyFiles/

где MyDirectoryWithManyFiles / - это каталог, содержащий ваши файлы

Сценарий создаст подкаталоги и скопирует в них 1000 файлов

ответил(а) 2014-02-21T19:02:00+04:00 6 лет, 4 месяца назад
65

Что-то вроде этого могло бы это сделать:

dir=1
counter=1

for file in spec*
do
echo "cp $file dir_$dir"
((counter++))
(( $counter%1000 == 1 )) && ((dir++))
done

объяснение

    dir=1 и counter=1 задают переменные. for file in spec* прокручивается через spec* файлы имен шаблонов. echo "cp $file dir_$dir" будет выводиться как cp spec123 dir_1/dir_2,... Я использовал echo чтобы вы могли проверить поведение перед тем, как идти вперед и сделать правильный cp. ((counter++)) увеличивает counter переменных. (( $counter%1000 == 1 )) && ((dir++)) если $counter находится в форме 1000K + 1, увеличьте значение $dir.

ответил(а) 2014-02-21T18:23:00+04:00 6 лет, 4 месяца назад
40

Вот способ сделать это в Python:

Создайте новый файл под названием " manage_files.py " или что-то еще, вставьте в него этот код:


# Hat-tip to http://stackoverflow.com/questions/3964681/find-all-files-in-directory-with-extension-txt-with-python
import os
import glob
from subprocess import call

# Initialise
my_dir = 'files_are_here'
num_files = 10

# Get a list of all files in my_dir
os.chdir(my_dir)
all_files = glob.glob('*')

for i in range((len(all_files) / num_files) + 1):
files = all_files[i * num_files:(i + 1) * num_files]
dirname = "dir_%s" % i
call(["mkdir", dirname])
file_names = ' '.join(files)
arg = ['mv', '-t', '%s/' % dirname]
arg.extend(files)
call(arg)

Затем из оболочки Linux типа python manage_files.py и магия будет делать свои вещи.

ответил(а) 2014-02-21T19:07:00+04:00 6 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема