LINUX.ORG.RU

Команда bash для вывода длинных имен файлов

 


0

1

Добрый день!

Помогите пожалуйста. Нужно в терминале вывести те файлы, имена которых (полный путь) имеют длину более 400 символов. Рекурсивно в каталоге и во всех вложенных. Как это сделать?

Дурацкая проблема - в macOS пользуюсь облаком OneDrive, который не может обработать имена файлов с длиной более 400 символов, но при этом не показывает, с какими именно файлами проблема! Логов тоже не нашел. Вручную нереально найти, так как в облаке сотни тысяч файлов.

Так у тебя Linux или MacOS?

Для Linux что-то вроде:

#!/bin/bash
find /где-то -type f | while read FN
do
 if [[ ${#FN} -ge 400 ]] 
 then 
   echo $FN
 fi
done

anonymous
()
Ответ на: комментарий от crutch_master

Могу только через named pipes вариант представить.
Напрямую не знаю как.

Gintoki
()
Ответ на: комментарий от crutch_master

Через именованный пайп, mkpipe. Но не стоит так делать, однопоточный процесс однажды начнет ждать сам себя и заблокируется.

legolegs ★★★★★
()
Ответ на: комментарий от Gintoki

Но лучше, всё же, как-то так

Кому лучше? То что на cat foo | ... ругаются ещё можно понять. А тут-то что?

А можно так:

find -type f | grep -E "\/[^\/]{400}[^\/]*$"

Tanger ★★★★★
()
Ответ на: комментарий от vodz

А почему любите* basic?

Воообще, я люблю PCRE. Но локальный find не умеет:

$ find -regextype help
find: Unknown regular expression type ‘help’; valid types are ‘findutils-default’, ‘ed’, ‘emacs’, ‘gnu-awk’, ‘grep’, ‘posix-awk’, ‘awk’, ‘posix-basic’, ‘posix-egrep’, ‘egrep’, ‘posix-extended’, ‘posix-minimal-basic’, ‘sed’.

А posix-basic навеное самый кросплатформенный (после дефолтного)

* могу попросить ко мне на «ты»?

KennyMinigun ★★★★★
()
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: комментарий от vodz

Вы похоже с прямым углом перепутали.

Прямой угол?

Для grep '/' - не спец символ, зачем экранировать?

Привык в sed.. Надо бы переучиться. И приучить себя в sed использовать не только / как разделитель. Всякие https:\/\/ ужасны.

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Прямой угол?

Вы не русский? Бывает :) Фраза означает, что возражающий понял о чём речь, но чтобы подчеркнуть именно этот фразеологизм используется только в таком значении.

vodz ★★★★★
()
Ответ на: комментарий от vodz

Вы не русский? Бывает :)

Русский.

Фраза означает, что возражающий понял о чём речь, но чтобы подчеркнуть именно этот фразеологизм используется только в таком значении.

Странно, но я не смог загуглить такое значение фразеологизма. Может быть это у вас что-то местное? У меня «прямой угол» не вызывает никаких ассоциаций, кроме как угол в 90 градусов и что-то похожее на него.

И я не вижу тут возражающего. Gintoki предлагает чуть измененный вариант, но я не вижу в нём чего-то что стоило бы того чтобы запостить отдельным комментарием. (разве что только -r).

Tanger ★★★★★
()
Ответ на: комментарий от Tanger

Странно, но я не смог загуглить такое значение фразеологизма.

Хм, у меня 84300 ссылок.

но я не вижу в нём чего-то что стоило бы того чтобы запостить отдельным комментарием

Ну он даже первую строку поправил с env :) Главное то, конечно, засунул цикл в текущий процесс bash-а, а find — в сопроцесс.

vodz ★★★★★
()
Ответ на: комментарий от Tanger

1. Использовать для read ключ '-r' стоит всегда, кроме случаев, когда это не нужно по конкретным причинам.
Рад, что заметил этот момент. Только лишь ради него стоило бы писать отдельный комментарий)
2. Первую строку тоже лучше оформить как у меня в примере. Потому что в каких-то ситуациях бинарник баша может оказаться не в каталоге /bin.
3. Ну а то, что я переписал пример без пайпа - привычка такого оформления. Не вижу смысла порождать сабшелл.
Это не основная правка была, просто самая заметная.

Gintoki
()
Ответ на: комментарий от Gintoki

-r и env заметил уже после своего первого комментария.

Кажется что пользы было бы больше если бы в комментарии сразу были описаны изменения и аргументы в их пользу.

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

Субъективно - с пайпом лучше воспринимается. А высокая производительность в bash в большинстве задач не требуется.

Tanger ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.