Intereting Posts
Как запустить интерактивные команды, как другого пользователя Удалить все после второго подчеркивания Является ли VMWare причиной того, что мой Linux-сервер потерял сетевое подключение? Это хорошая привычка, чтобы rm zip файл перед упаковкой папок? использование системной команды в awk-скрипте Fritz WLAN USB-накопитель – пакеты Xlib / Xfree86 dev для установки Wine zsh не может содержать некорректные `$ *` и `$ @` равные Плагин vim netrw фактически отображает содержимое файла каталога? Как создать вложенный каталог в одну команду? Как удалить файлы одинакового размера в каталоге? Проблемы с сортировкой в ​​Linux Принудительный telnet / ssh использовать crtl-H для backspace setfacl весь каталог, содержащий различные типы файлов? Как захватить из интенсивного профессионала в Ubuntu, Fedora, CentOS, используя интерфейс HDMI? Копирование глубоко вложенной структуры каталогов

Как создать скрипт для создания структуры и сортировки файлов, перемещая их в каталоги?

У меня есть куча файлов, первая строка которых содержит дату. Все они начинаются с одних и тех же первых двух букв “ff”. Мне нужно создать скрипт, который будет использовать эту первую строку во всех файлах и сортировать их в каталогах, создавая эти каталоги, а также.

Например, 1 файл содержит следующее:

Кошачий файл

Мне нужно извлечь полную дату, переместив все файлы в каталоги за год, затем подкаталоги за месяц и еще один подкаталог за день. Пока у меня есть этот скрипт, который перемещает файлы только по годам. Мне сказали, что я могу использовать функцию -p, но на самом деле я использую UNIX в течение 3 дней, так что теперь запутался.

скрипт

Вы должны прочитать страницы руководства:

  • человек 1 разрез
  • человек 1 мкдир

подсказки:

  • cut -f1,2,3 дает возможность вывести несколько полей
  • cut --output-delimiter=CHAR позволяет переопределить выходной разделитель, который по умолчанию равен входному разделителю
  • mkdir -pa/b/c создает иерархию каталогов a / b / c , т. е. b – это подкаталог a, а c – подкаталог b .

Вот решение:

 outputPath='/path/to/output/' for file in $(find ~/filesToSort/ -type f -name "ff*") do firstLine=$(head -n 1 $file) datePath="${firstLine//-//}" mkdir -p $outputPath$datePath mv $file $outputPath$datePath done 

По сути, эти скрипты:

  1. Список всех файлов
  2. Получить первую строку файла в строку
  3. Замените “-” на “/” в строке, чтобы создать путь
  4. Создать путь
  5. Переместить файл во вновь созданный путь

Вы можете добавить тест, чтобы убедиться, что первая строка соответствует требуемому шаблону.