Я бы написал на Perl один -лайнер:
perl -wE 'for (@ARGV) {rename $_ => s/\d+/500 + $&/re or die $!}' file*
Это перебирает каждое имя файла, вычисляет новое имя файла, добавляя 500 к числовой части, а затем переименовывает файл.
F — номер поля, по умолчаниюкоманда sort
определяет поле как текст, окруженный пробелами. Опции -b и -t могут изменить значение по умолчанию; документ, на который вы ссылаетесь, содержит длинную головную боль -, вызывающую обсуждение деталей указания разделителей полей в зависимости от локали и тому подобного.
Вы спрашиваете: «Что такое F для размера файла или времени последнего изменения?». sort
не имеет понятия размера файла или времени модификации. Поскольку ваша цель — отфильтровать вывод du
, запустите команду du
и подсчитайте поля.
Например, когда я запускаю du
без опций, я получаю два поля на строку, размер и имя файла/каталога:
$ du.
8 ./ruby
4 ./nextcloud/data/nextcloud
12 ./nextcloud/data/database/nextcloud
4 ./nextcloud/data/database/performance_schema
4 ./nextcloud/data/database/mysql
... etc...
Если вам нужно отсортировать файлы и каталоги в текущем каталоге, du. | sort -n
подойдет, потому что sort
по умолчанию сортирует по первому полю. Параметр -n необходим для сортировки по цифрам, а не по буквам:
$ du. | sort -n
4 ./bitwarden/data/icon_cache
4 ./.cache/obexd
4 ./.cache/pip/wheels/2c/4a/61/5599631c1554768c6290b08c02c72d7317910374ca602ff1e5
4 ./.cache/pip/wheels/33/56/20/ebe49a5c612fffe1c5a632146b16596f9e64676768661e4e46
4 ./.cache/pip/wheels/88/a7/30/e39a54a87bcbe25308fa3ca64e8ddc75d9b3e5afa21ee32d57
4 ./.cache/pip/wheels/fc/a8/66/24d655233c757e178d45dea2de22a04c6d92766abfb741129a
... etc...
Вы можете добавить -r, чтобы сначала отображались большие файлы.
Для сортировки по пути:
du. | sort -k 2
У меня нет быстрого решения для сортировки по имени файла, то есть по последнему компоненту пути. Я думаю, что один sort
не может этого сделать, потому что вам нужно будет выяснить, какое подполе является именем файла, а номер подполя варьируется. Вот частичное решение (оно работает только для путей, содержащих косую черту):
$ du. | sed 's|\(.*\)/\(.*\)|\1/\2 \2|' | sort -k3
5639116.
12 ./.cache/pip/http/9/8/7/0 0
12 ./.cache/pip/http/9/c/b/c/0 0
12 ./.cache/pip/http/c/0/4/0/0 0
12 ./.cache/pip/http/f/0/3/0 0
12 ./.cache/pip/http/f/e/d/0 0
136 ./.cache/pip/http/4/8/d/7/0 0
164 ./.cache/pip/http/a/0 0
16 ./.cache/pip/http/0/0/9/7/0 0
16 ./.cache/pip/http/2/8/0 0
... etc...
Я не знаю, есть ли какие-либо комбинации параметров, которые заставляют команду du
печатать измененное время. Если есть, дайте мне знать, и я укажу, что это за поле.