Написание сценария, который составляет нумерованный список каждого доступного для записи файла нормального типа - PullRequest
0 голосов
/ 17 июня 2019

Мне нужно сделать какой-нибудь скрипт hdguard. Я застрял, потому что я должен сделать нумерованный список всех доступных для записи файлов нормального типа (без каталогов ссылок и т. Д.). Список должен включать только имена и размеры файлов. Затем я должен выбрать файлы, которые я хочу удалить по номерам.

Я перепробовал все виды ls функций и find функций, но никоим образом не удовлетворил меня.

ls -Ss1pq --block-size=1

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

Желаемый вывод:

1. [size] [filename]
2. [size2] [filename2]
...

После того как я выбрал, например, «1», скрипт должен создать txt-файл со списком путей к каждому выбранному файлу.

Итак, у меня есть это

find /homee -type f -not -path '/\.*' |sort -r -n -k7

Становится лучше

find /homee -type f - ls -not -path '/\.*' -exec du -hs {} + |sort -r -n -k7

а как отображать только имена, а не путь?

я также могу пойти с

find /homee -type f -not -path '/\.*' -exec du -hs {} + |sort -r -n -k7 |sed 's/.*\///' | nl

но сейчас там нет размеров файлов что мне делать?

Ответы [ 2 ]

0 голосов
/ 17 июня 2019

Bash 4+ может использовать mapfile для генерации массива из стандартного ввода.select - инструмент для создания меню.Ctrl + D для выхода.

mapfile -t Files < <(
  find . -type f -not -path '*/\.*' \
         -exec du -h {} + |sort -r
)
select f in "${Files[@]##*$'\t'}"; do rm -i "$f"; done

Вывод du разделен табуляцией, поэтому "${Files[@]##*$'\t'}":

  • ${Files[@]} - Все элементымассива Files
  • ${variable##pattern} - вычесть все крайние левые вхождения pattern из variable
  • *$'\t' - все, после чего следует буквенная табуляция
0 голосов
/ 17 июня 2019

Очень простой способ ввода номеров строк в файл, это использовать grep -n в пустой строке, как вы можете видеть здесь:

Prompt> cat testtttt.txt
First line
Second line
Third line
Prompt> grep -n "" testtttt.txt
1:First line
2:Second line
3:Third line

-n добавляет номер строки, в которой находится запись, и, выполняя поиск пустой строки (которую можно найти в каждой строке), вы получаете вид нумерации строк.

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