Найдите самые большие файлы рекурсивно

Это намного более сложно, чем это должно быть :-)

Запустите туннель:

ssh -f -N -D 9999 -M -S /tmp/ssh_tunnel_%h.sock -o ExitOnForwardFailure=yes $SSH_HOST && \
echo "ssh tunnel started successfully" || \
echo "ssh tunnel failed to start"

Остановите туннель:

ssh -S /tmp/ssh_tunnel_%h.sock -O exit $SSH_HOST

.

Это - все, что необходимо сделать. Если Вы хотите детали, пропустите ниже.

Для Вашего второго вопроса, IP один. Нет, Ваш IP не изменяется. Все, что Вы сделали, должно было создать прокси SOCKS через удаленный хост. Ваша система автоматически не использует этот прокси, если Вы не говорите это.

Объяснение SSH
Args для запуска туннеля:
-f: Скажите ssh самому фону. Это будет только сам фон, если это запустит успешно (сотрудничает с -o аргумент ниже).
-o ExitOnForwardFailure=yes: Это говорит ssh выходить, если он не может настроить прокси SOCKS.
-N: Не выполняйте команду. Мы просто хотим туннелировать, не сделать что-либо на удаленном хосте.
-D 9999: Ваш прокси SOCKS.
-M: Это требуется для-S аргумента работать здесь.
-S /tmp/ssh_tunnel_%h.sock: Это говорит этому использовать/tmp/ssh_tunnel_HOSTNAME.sock для своего сокета управления. -M опция говорит этому, что ssh должен настроить этот сокет и не дать команды к другому ssh, уже слушая на сокете. Можно использовать этот сокет для установки дополнительных туннелей после того, как ssh будет уже работать. %h использует имя хоста удаленного хоста как часть имени файла.

Args для остановки туннеля:
-S /tmp/ssh_tunnel_%h.sock: Это должно быть очевидно. Однако, так как мы не выпустили-M, который означает, что ssh должен соединиться с сокетом, который это уже там, и скажите его, что сделать вместо того, чтобы делать что-либо само.
-O exit: Это - часть -S. Мы говорим ssh, слушающему на сокете выходить.
$SSH_HOST все еще требуется здесь. Даже если необходимо было указать абсолютный путь сокета без использования %h в имени файла ssh все еще хотел бы, чтобы был указан удаленный хост. Поэтому я поместил %h в аргументах. Мог бы также использовать его, если ssh собирается попросить хост, и это сохраняет вещи организованными.

5
14.11.2012, 17:05
4 ответа

Я использовал бы:

du -a Music/ | grep "\.mp3$" | sort -n | tail -n1

если Music Ваш каталог

6
27.01.2020, 20:32
  • 1
    Это повредится, если будут новые строки в именах файлов. –  Chris Down 13.11.2012, 18:25
  • 2
    я не протестировал этот конкретный случай, но Вы, вероятно, правы. Это также перестанет работать, если файлы не будут иметь mp3 расширения. –  Vincent Nivoliers 13.11.2012, 18:27
  • 3
    в именах файлов так необычны, что почти всегда это не стоит усилия рассмотреть случай и программу против него. –  angus 13.11.2012, 21:30
  • 4
    @ChrisDown я не озвучил бы необоснованное мнение, сопровождаемое уничижительным тонким замечанием на техническом форуме как это, как Вы просто сделал, но каждому своему собственному :). Так или иначе, если количество имен файлов с новыми строками от всех файловых систем всех, кто записал на этой странице, больше, чем 0, затем возможно, у Вас была бы точка (но маленькая). –  angus 14.11.2012, 13:32
  • 5
    @angus, никакая потребность быть устойчивым в этом угловом случае, как это вряд ли произойдет подход, является очень общим источником дыр в системе безопасности. Даже при том, что это, вероятно, не имеет значения в этом самом случае на сайте как SE, который предназначен, чтобы быть ссылкой, я согласился бы с ChrisDown попытаться сделать правильную вещь и указать на ограничения, когда мы не идем как далеко. –  Stéphane Chazelas 14.11.2012, 17:21

Это должно сделать это (с GNU, находят и вид):

find . -type f -iname '*.mp3' -printf "%b %p\0" | sort -zn | tr \\0 \\n

Если Вы не хотите, чтобы размер файла был распечатан, только имена файлов:

find . -type f -iname '*.mp3' -printf "%b %p\0" | sort -zn | awk -v RS=\\0 '{ gsub("^[0-9]+ ", "") ; print }'
6
27.01.2020, 20:32
  • 1
    На основе количества upvotes этот ответ кажется вероятным, но версия Находки, установленной с OSX, кажется, не поддерживает-printf опцию. Извинения за то, что не была упомянута моя системная среда. –  nipponese 14.11.2012, 17:06

С zsh:

ls -ld -- **/*.mp3(.DOL[1,5])

Перечислит 5 самых больших регулярных файлов (с точки зрения размера файла, не использования диска, которое является не обязательно тем же). С GNU ls, добавьте -U так, чтобы они появились в уменьшающемся порядке размера.

Для использования диска, которое должно было бы быть:

zmodload zsh/stat
zdu() zstat -A REPLY +block -- $REPLY
du -- **/*.mp3(.nDO+zdu[1,5])

Конечно, можно адаптировать это к другим метрикам, связанным с файлом, как продолжительность MP3 в секундах:

mp3_duration() REPLY=$(exiftool -p '$Duration#' - < $REPLY)
print -rl -- **/*.mp3(.nDO+mp3_duration[1,5])
2
27.01.2020, 20:32

Мое начальное предположение было неправильным, был существующий ответ на этот вопрос, детализированный здесь:

find . -type f -print0 | xargs -0 du -s | sort -n | tail -10 | cut -f2 | xargs -I{} du -sh {}

Все еще дал Вам парней точки все же.

1
27.01.2020, 20:32
  • 1
    Это менее эффективно и менее надежно (не работал бы на имена файлов с символами новой строки или символами табуляции), чем большинство ответов, которые Вам дали здесь, хотя –  Stéphane Chazelas 14.11.2012, 17:14
  • 2
    @StephaneChazelas, у меня нет способа проверить мнение но я предположу, что Вы правы. Однако этим решением является единственное, которое работало бы на мою среду, и все еще достаточно гибкий для корректировки суммы возвращенных результатов. –  nipponese 14.11.2012, 20:16
  • 3
    @StephaneChazelas я забираю его, Vincent Nivoliers, также закрепленный он. –  nipponese 14.11.2012, 20:20

Теги

Похожие вопросы