Bash & Ma c OSX: Как сгруппировать файлы в пронумерованные папки в пакетах по 5? - PullRequest
0 голосов
/ 20 января 2020

Я на Ма c Os 10.14.6 и у меня есть каталог, который содержит подкаталоги, которые все содержат текстовые файлы. В целом, существует много сотен текстовых файлов.

Я бы хотел go просмотреть текстовые файлы и сгруппировать их в пронумерованные папки, чтобы каждая папка содержала 5 файлов (их не нужно группировать по каким-либо общий фактор (например, они не должны быть сгруппированы по имени или размеру). Им просто нужно иметь 5 файлов в папке)

Пример Перед запуском скрипта

apple.txt
new york.txt
ranger.txt
london.txt
the mountains (55).txt
so wonderful - new version.txt
my life a new.txt
orange.txt
property.txt
space.txt

После запуска скрипта

**In Folder 01**
apple.txt
new york.txt
ranger.txt
london.txt
the mountains (55).txt

**In Folder 02:**
so wonderful - new version.txt
my life a new.txt
orange.txt
property.txt
space.txt

(Примечание: папки просто называются 01, 02, 03,, у них нет специальные имена).

Как бы я это сделал?


Шаги, которые я пробовал

Google вокруг, кажется, Bash будет лучше для этого ,

В Bash вы можете использовать команду a, чтобы создать массив для хранения файлов, что позволит вам работать с ними. Затем вы можете l oop просмотреть файлы и поместить их в массив.

declare -a arrFiles
for file in cd
do
    arrFiles=("${Files[@]}" "$file")
done

Bash также имеет команду mv, которую можно использовать для перемещения файлов в новые места.

Однако я не уверен, как объединить эти команды для группировки файлов в пакеты по 5.

Обратите внимание: пока решение работает на терминале ОС Ma c, оно не нужно использовать Bash. Тем не менее, от Googling, Bash кажется наиболее подходящим.

1 Ответ

1 голос
/ 20 января 2020

Вы можете использовать этот сценарий bash:

unset n
while IFS= read -rd '' f; do
    printf -v d '%02d' $(( (n++ + 5) / 5 ))
    [[ ! -d $d ]] && mkdir "$d"
    mv "$f" "$d/"
done < <(find . -type f -maxdepth 1 -print0)

(( (n++ + 5) / 5 )) по модулю арифметики c, чтобы получить числа 1, когда n равно 0..4, или получить 2 когда n равно 5..9 et c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...