Команда find выводит файлы без структуры каталогов

В Bash есть функция, которая позаботится об этом: command_not_found_handle . Это ловушка, которая выполняется, когда bash пытается выполнить внешнюю команду. Zsh имеет аналогичный command_not_found_handler . Многие дистрибутивы устанавливают bash так, что он предлагает установить соответствующий пакет, если вы попытаетесь выполнить команду, которой не существует. Например, вам кажется, что вы используете производную версию Debian, поэтому установите пакет command-not-found package . Этот механизм эквивалентен настройке псевдонима для каждой команды, предоставляемой дистрибутивом.

3
20.03.2019, 13:07
2 ответа

согласно мантару (длинное чтение)

--transform=EXPRESSION, --xform=EXPRESSION
Use sed replace EXPRESSION to transform file names.

Я использовал

find. -name \*.py -print | xargs tar cf tmp7/test-py.tar --transform=s:./.*/:: -

все файлы были на одном уровне.

выражение sed

  • s:./.*/:::(жадный )заменить ./.*/ничем.

бонус:

find. -name \*.py -print | sed -e s:./.*/:: | awk 'a[$1]++ { print ; }'

напечатает повторяющееся имя файла.

3
27.01.2020, 21:17

Аналогично решению пользователя Archemar, применяется только при распаковке tar. Замена .*/пустой строкой.

pv python_files.tar| ssh some_user@some_server 'cat | tar xz --transform=s,.*/,, -C /some/path/on/server'
1
27.01.2020, 21:17

Теги

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