Предполагая, что вы имеете в виду третий символ , а не третью букву ;
find . -name '[!akGQ]?[!0-9]*'
Каналы включают подоболочки, часть которых не запускается в родительской оболочке и, таким образом, не может влиять на рабочий каталог этого процесса родительской оболочки. Так ведет себя ЗШ:
% cd /tmp
% cd /var/tmp | tail
% pwd
/tmp
% echo foo | cd /var/tmp
(pwd now: /var/tmp)
% cd /tmp
% echo foo | cd /var/tmp | echo bar
bar
% pwd
/tmp
%
Обратите внимание, что каталог изменился только тогда, когда cd
была последней командой в конвейере; это было запущено в самой родительской оболочке и, таким образом, могло изменить рабочий каталог этого процесса.
Полезное использование этой функции обычно включает явную подоболочку и выполнение команд в ней:
dowork | ( cd elsewhere && domorework ) | andyetmore
также обязательно проверьте вызов cd
на наличие ошибок, а не предполагайте, что он сработал, если только вы не хотите, чтобы вывод rsync
распылялся по всему /
, или другой подобный гипотетический беспорядок...