Я, вероятно, нахожусь здесь над моей головой. Я пытаюсь создать скрипт bash, который будет идентифицировать файлы, начинающиеся с 5 цифр, проверить, существует ли каталог для этого файла (или группы файлов) и переместить файлы в каталог. Если каталог не существует, я хочу его создать, а затем переместить файлы.Сравнение массивов и создание каталогов
Это сценарий, который я получил до сих пор, но реалистично это совсем не так.
#!/bin/bash
files=($(find . -type f | grep -E "[0-9]{5}" -o))
directories=($(find . -type d))
for i in ${files[*]}
do
printf "▸ ▸ pdf file found: %s\n" $i
done
for d in ${directories[*]}
do
printf "▸ ▸ directory found: %s\n" $d
done
NewDir=(`echo ${files[@]} ${directories[@]} | tr ' ' '\n' | sort | uniq -u `)
for nd in ${NewDir[*]}
do
printf "mkdir for: %s\n" $nd
done
Пример каталога, который должен быть отсортирован будет выглядеть следующим образом:
476B Oct 19 14:43 .
544B Oct 21 10:36 ..
68B Sep 17 08:14 12345/
68B Sep 17 08:14 12735/
0B Sep 17 08:14 29375.pdf
0B Sep 17 08:14 29375a.pdf
0B Sep 17 08:14 29375-1.pdf
0B Sep 17 08:14 32952.pdf
0B Sep 17 08:14 39472.pdf
68B Sep 17 08:14 59723/
0B Sep 17 08:14 97132.pdf
273B Oct 19 14:43 sort.sh
Так поднятием этого примера, я хочу, чтобы идентифицировать файлы, начиная с 29375 и сделать каталог для них , затем переместите их в этот каталог.
Здесь я столкнулся с трудностями, сравнивая найденные файлы с существующими каталогами. Массив NewDir был тестом, который я делал, когда пытался найти решение для этого.
Спасибо за помощь в обращении/помощи.
Спасибо. Попытка выяснить, что делает sed, но кроме того, скрипт делает что-то довольно странное. Тестирование команды find на ее основе дает правильные результаты. Однако, когда операторы if проверяют значение $ dir, он использует полное имя файла (с расширениями) вместо результатов команды find на своем собственном. После добавления некоторых отпечатков для отладки это происходит: Найдено файлов: ./11111-1.jpg Проверка наличия каталога ... Не найдено ни одного каталога. Создание: .11111-1.jpg mkdir: ./11111-1.jpg: Файл существует Существует ли каталог сейчас? .... Да. so..if [! -d $ dir] ищет каталог? – Martin
Команда 'sed' в конвейере там точно, чтобы этого избежать. Вы уверены, что ничего не пропустили? То, что он делает, есть (для каждой строки ввода): захватить 5 цифр после '. /' И вывести этот захват. –