Меню сайта
   Главная   
   Обо мне   
   Статьи   
   Дневник   
   Картинки   
   Файлы   
   Форум   
   Гостевая книга   

Категории раздела
Куклы и игрушки [60]
Личное [116]
Музыка [19]
Общее [304]
Японский язык [12]
ZX Spectrum [71]
Субмарины [98]
Настольные игры [34]
Го (碁) [11]
Книги [16]
Япония [26]
Таро [4]
Запертый шкаф [17]
CSA (КША) [15]
GNU/Linux [134]
Ubuntu [103]
Manjaro Linux [40]
Python [3]
Магнитольное [44]
Commodore64 [15]
Игровые приставки [2]


 
Дневник (2020 » Февраль » 12 в 23:26)
GNU/Linux Рабочие заметки - find, mkdir, stderr, for,cp, touch

Рабочие заметки администрирования. Накопилось более 9000 изображений в каталоге и стали его тормозить. Была поставлена задача  автоматизировать следующие операции: 1) создать каталоги с именами диапазона годов, за которые есть файлы.2) раскидать файлы по папкам в соответствии с их датой. Походу дела решались сопутствующие вопросы

Групповое создание каталогов

Три способа создать сразу несколько каталогов: перечислением, циклом, диапазоном:
mkdir ./{2010,2011,2012,2013}
mkdir ./$(for x in {2010..2013};do echo $x;done)
mkdir ./{2010..2013}
Таким образом видно, что если числовые каталоги являются диапазоном, то и создавать их следует им же. В противном случае списком, а цикл вообще от лукавого, хотя при необходимости позволит добавлять к цифрам буквенный префикс.

Поиск файлов по дате

Вывести (в текущей папке) файлы между двумя полными датами:
find . -mindepth 1 -newermt '2011-03-29 00:00' ! -newermt '2011-03-30 23:59' -print

Вывести файлы от указанной даты до текущей:
find . -mindepth 1 -newermt '2020-01-01' ! -newermt $(date +%Y-%m-%d) -print

Вывести файлы за весь указанный год:
y=2020; find . -mindepth 1 -newermt $y+'-01-01 00:00' ! -newermt $y+'-12-31 23:59' -print

Вывести файлы за весь указанный год в отсортированном виде:
y=2020; find . -mindepth 1 -newermt $y+'-01-01 00:00' ! -newermt $y+'-12-31 23:59' -print \
| sort -hr

Подсчитать кол-во файлов за весь указанный год:
y=2016; find . -maxdepth 1 -newermt $y+'-01-01 00:00' ! -newermt $y+'-12-31 23:59' -print \
| wc -l


Подсчитать количество файлов в текущем каталоге:
ls -A | wc -l

Подсчитать количество файлов рекурсивно (в текущем каталоге и всех его подкаталогах):
find . -type f | wc -l

Отдельно создать папки с годами, и отдельно скопировать в них файлы по годам:
mkdir ./{2011..2020}
for y in {2011..2020}; do find . -maxdepth 1 -newermt $y+'-01-01 00:00' ! \
-newermt $y+'-12-31 23:59' -exec cp -p {} $y \; ; done

Проверка условия если нет папки 2010, то..
if ! [ -d ./2010 ]; then echo no ; else echo yes ; fi

Одной строкой создать каталоги по годам и скопировать в них файлы:
for y in {2011..2020}; do if ! [ -d ./$y ] ; then mkdir $y ; fi ; \
find . -maxdepth 1 -newermt $y+'-01-01 00:00' ! -newermt $y+'-12-31 23:59' \
-exec cp -p {} $y \; ; done

У команды touch помимо создания кучи пустых файлов есть первичная функция изменять даты файлов:
touch -mat 202007081215.25 файл

Можно использовать вместо -t ключ -d, который принимает строковое значение. Для полной исторической достоверности назначим всем каталогам в дату соответствующий названию год:
for y in {2011..2020}; do touch -mad $y+"-01-01 00:00:00" $y ; done
 

Перенаправление вывода

Про /dev/null я знаю, но 2>&1 пришлось загуглить.

0 — STDIN, 1 — STDOUT и 2 — STDERR
По умолчанию, если вы не укажете номер, то будет подразумеваться STDOUT.
Необходимо поставить амперсанд "&" перед номером назначения.

Перенаправить вывод с STDERR и STDOUT в помойку (оба варианта идентичны):
>/dev/null 2>&1
>/dev/null 2>/dev/null


Использованные ссылки:
  1. Что означает "> /dev/null 2>&1"?
    https://habr.com/ru/post/138591/
  2. Поиск файлов по дате и времени в консоли при помощи find
    https://evasive.ru/55cea2ebad64c4b4be639cdf395ce69a.html
  3. https://ru.stackoverflow.com/questions/806235/

Категория: GNU/Linux | Просмотров: 479 | Добавил: harushima | Теги: linuxwork, bash | Рейтинг: 0.0/0 |
Всего комментариев: 0.
В целях защиты от спама, добавлять комментарии могут только зарегистрированные пользователи. Если Вы не хотите регистрироваться под своим именем, войдите под логином: anonymous, паролем: anonymous.   ( Регистрация,   Вход).
Авторизация
Анонимный вход:
anonymous / anonymous

Календарь
«  Февраль 2020  »
ПнВтСрЧтПтСбВс
     12
3456789
10111213141516
17181920212223
242526272829

Поиск

Облако тэгов
JGSDF игрушки Брюнетки Кладбище сайты Ярость Дракулы Древний Египет девушки кошки Cthulhu Вампиры Kitsune Ужас Аркхема инструмент комиксы Lovecraft готика Submarine submarine rc toy Hosting игротека Ужас Аркхэма book uboat мобильная связь го Edgar Poe swf Mansions of Madness Nightmares персоны Synergy linux-hardware bash youtube Storages Python Мастер-рукожоп Магнитофоны Entropy Grub2 loglevel WiFi Beeline ОПСОСЫ sharp939 Аудиокассеты Windows linuxwork Хочуны ImageMagick топБарыг C64c Commodore

Статистика
Яндекс.Метрика
Онлайн всего: 2
Гостей: 2
Пользователей: 0

Page QR code


Перепечатка материалов сайта без активной ссылки запрещена. Следить за RSS
(c) hermitlair.ucoz.com 2009-2024
Лучший браузер!
Блокировка рекламы