я бы хотел

  1. найти конкретные папки
  2. повторить их имя
  3. ls -l их содержание

Моя проблема в том, что я не знаю, как объединить echo {} и ls -l {} в одной команде поиска.

линия для эха:

sudo find / -type d -name 'yt' -exec echo {} \;

строка для ls:

sudo find / -type d -name 'yt' -exec ls -l {} \;

Как я могу объединить эти два?

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

3 ответа3

1

Почему бы просто не поместить две разные опции -exec в одну и ту же команду find ?

Это работает для меня:

$ find --version
find (GNU findutils) 4.4.2
$ find . -type d -name mydir -exec echo {} \; -exec ls -l {} \;
./mydir
total 0
-rw-rw-r-- 1 daniel daniel 0 févr. 25 15:32 myfile
0

Это не общее решение, но оно будет работать для вас, так как вы ищете каталоги:

sudo find / -type d -name 'yt' -execdir readlink -f {} \; -exec ls -l {} \;

Execdir выполняет команду в подкаталоге, соответствующем найденному файлу (который, поскольку вы ищете каталоги) является самим каталогом (а readlink -f дает его полный путь). Второй -exec будет на другой стороне снова совпадать с каталогом и делать с ними «ls -».

Использование jsut echo в первом execdir не напишет вам полный путь, а только последний каталог, которого может быть недостаточно.

0

Вы можете легко использовать команду печати здесь.

$sudo find / -type d -name 'bin' -print  -exec ls -l {} \;

Например,

  1. найти папки bin
  2. повторить их имя или напечатать их имена
  3. ls -l их содержимое - перечислить их содержимое.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .