В Bash есть функция, которая позаботится об этом: command_not_found_handle
. Это ловушка, которая выполняется, когда bash пытается выполнить внешнюю команду. Zsh имеет аналогичный command_not_found_handler
. Многие дистрибутивы
устанавливают bash так, что он предлагает установить соответствующий пакет, если вы попытаетесь выполнить команду, которой не существует. Например, вам кажется, что вы используете производную версию Debian, поэтому установите пакет command-not-found
package . Этот механизм эквивалентен настройке псевдонима для каждой команды, предоставляемой дистрибутивом.
согласно мантару (длинное чтение)
--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:./.*/:: -
все файлы были на одном уровне.
s:./.*/::
:(жадный )заменить ./.*/
ничем. find. -name \*.py -print | sed -e s:./.*/:: | awk 'a[$1]++ { print ; }'
напечатает повторяющееся имя файла.
Аналогично решению пользователя Archemar, применяется только при распаковке tar. Замена .*/
пустой строкой.
pv python_files.tar| ssh some_user@some_server 'cat | tar xz --transform=s,.*/,, -C /some/path/on/server'