Команда для отображения содержимого каталога или вывода содержимого в файл?

Есть ли какая-либо команда для перечисления содержимого, если передана директория, но выводить содержимое, если это файл?

Например, часто, когда я просматриваю структуру каталогов, я начинаю вводить в терминал что-то вроде

ll /etc/path/ # I see a file in tab-completion that interests me, called myfile.txt ll /etc/path/myfile.txt # I do the auto-completion to get it into the command line less /etc/path/myfile.txt # Now I have to go back and change 'll' to 'less' 

Кроме того, если я ищу файл, я начинаю с

 less /etc/path # I see in tab-completion several files that might interest me, so I need to know more ll /etc/path # See more info about file sizes, etc, so I can choose the file I want. Have to change 'less' to 'll' less /etc/path/myfile.txt # Now that I know which file I want, I have to go back and change 'll' to 'less' 

Это то, что я делаю десятками раз в день и начинаю замедлять меня. Есть ли команда или сценарий, который делает для вас наиболее вероятный сценарий? Например

 some-program /etc/path/to/file/or/directory 

Если целью является текстовый файл или символическая ссылка на текстовый файл, будет выполняться «less / etc / path / to / …..». Но если бы это было что-то еще, например, каталог, двоичный файл, блок-устройство, это сделало бы 'll / etc / path / to / ……'

Конечно, если он делает что-то, чего вы не хотите, например «меньше» на символической ссылке файла, но вы хотите увидеть символическую ссылку с «ll», тогда вы просто запускаете «ll» вручную.

Что-нибудь вроде этого существует (я уверен, это там, похоже, такая общая задача)? Или я просто использую командную строку Linux неэффективно, и есть более эффективные способы навигации по нему … как вы это делаете? Или я действительно единственный, кто все время возвращается туда и обратно в командной строке, переключая «меньше» на «ll» и обратно?

Я пробовал написать что-то, но я начинающий bash, поэтому он определенно не работает и довольно неуклюжим, даже если это так. Конечно, есть лучший способ, какая-то волшебная команда, о которой я просто не слышал?

 some-program() { if [[ $# > 1 ]]; then echo "Only one argument supported at this time" exit 1 fi if [[ $# == 0 ]]; then ELEMENT="." else ELEMENT="$1" fi if [[ -d $ELEMENT ]]; then ls --color=auto -alF "$ELEMENT" else less "$ELEMENT" fi } 

One Solution collect form web for “Команда для отображения содержимого каталога или вывода содержимого в файл?”

less имеет действительно опрятную встроенную функцию, которая позволяет делать такие вещи. См. lesspipe руководства lesspipe .

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

  1. Настройте lesspipe после страницы man: eval "$(lesspipe)"

  2. Создайте ~/.lessfilter со следующим содержимым и сделайте его выполнимым:

     #!/bin/sh if [ -d "$1" ]; then ls -alF "$1" else # We don't handle this format. exit 1 fi exit 0 

Это устанавливает сценарий фильтра, выполняемый lesspipe для обработки типов файлов. Он проверяет, является ли то, что вы пытаетесь просмотреть, является каталогом и, если это так, запускает ls вместо этого.

Ваш первоначальный запрос включал цвет. Это, к сожалению, немного сложнее, поскольку less не показывает цвет по умолчанию, а выход из сценария фильтра по-прежнему пропускается через less . Для этого вам нужно использовать -R как вариант по умолчанию (который, вероятно, не очень хорошая идея, если вы когда-либо просматриваете двоичный файл). Я не думаю, что есть способ, чтобы сценарий lessfilter less рассказывал о добавлении нового параметра.

  • что grep -oh "" делать?
  • Как найти и подсчитать, сколько файлов содержит определенное слово?
  • Как я могу создать новые команды оболочки?
  • Команда «повторно применить» предыдущую команду?
  • Как я могу запустить определенную строку в виде команды в текстовом файле?
  • Синтаксическая ошибка Bash, когда `cd`ing в каталог
  • Как grep определенную строку _and_ первую строку файла?
  • Symlink везде
  • Как использовать xpra как xvfb-run?
  • Какая команда будет генерировать средние линии в минуту?
  • В чем существенное отличие между grep foo $ (CMD) и CMD | grep foo
  • Linux и Unix - лучшая ОС в мире.