Как записать имена файлов и их абсолютные пути в одну строку?

Похоже, что ловушка ERR выполняется потому, что функция FuncA имеет ненулевой статус выхода. Как описано в man bash

статус выхода функции - это статус выхода последней команды, выполненной в теле.

Которая, в данном случае, была [[ -d mydir2 ]]. Вы можете добавить true в качестве последней команды в функции, чтобы предотвратить это.

Конструкция if отличается, потому что (то же руководство):

Статус выхода - это статус выхода последней выполненной команды, или ноль, если ни одно условие не подтвердилось.

Я бы рекомендовал использовать if, а не добавлять true.

0
14.04.2019, 22:35
5 ответов

Использование GNUfind:

find "$PWD" -type f -printf '%f %h/%f\n'
  • %fИмя файла с удаленными начальными каталогами (только последний элемент ).
  • %hНачальные каталоги имени файла (все, кроме последнего элемента ). Если имя файла не содержит косых черт (, так как он находится в текущем каталоге ), спецификатор %h заменяется на `.'.
2
28.01.2020, 02:18

Вы можете использовать следующую команду для поиска файлов по их абсолютным путям. Например. Я пытаюсь найти файлы.sh с помощью cmd следующим образом:

find. -type f -iname "*.sh"
-1
28.01.2020, 02:18

Следующий однострочник bash создаст желаемый результат

for f in $(find $(pwd) -type f); do echo "$(basename $f) $(realpath $(dirname $f))"; done

Пояснение:
for _ in _ ; do _ ; doneперебирает то, что нашла ваша команда
basenameудаляет из пути все, кроме последней части (ака. имя файла)
dirnameделает наоборот
realpathвозвращает фактический путь (, поэтому вы не получите .для файла в cwd)

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

0
28.01.2020, 02:18

Со стандартнымfind:

find "$PWD" -type f -exec sh -c '
    for pathname do
        printf "%s\t%s\n" "${pathname##*/}" "$pathname"
    done' sh {} +

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

Это делается путем подачи пакетов найденных путей к короткому -строковому сценарию, который просто выводит имена в предпочтительном формате. Подстановка параметра ${pathname##*/}расширяется до значения $pathnameс удалением всего до последнего /.

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

3
28.01.2020, 02:18

Используйте эту команду:

find $PWD -type f -printf '%f %h/%f/n'

или

Ищите какие-то файлы, а затем переходите к этому:

find $PWD -type f -iname "filenames" -printf '%f %h/%f/n'
0
28.01.2020, 02:18

Теги

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