find. -path '*/__test__/*' -type f -name "index.js" \
-execdir echo mv -vt../data.js {} \;
Удалите echo
, который предназначен для пробного -запуска, чтобы запустить команду mv
для файлов.
!
является триггерным символом для расширения истории Bash . Если это включено,что-то вроде !foo
в командной строке расширяется до последней команды, начинающейся с foo
. Или если такой командной строки нет, оболочка выдает ошибку, как здесь.
Однако он не должен ничего делать в качестве последнего символа слова. На самом деле это работает так, как вы предполагали, во всех версиях Bash, которые я пробовал:
$ echo 'aa!bb' | awk -F! '{print $1}'
aa
В более поздних версиях !
также ничего не должно делать перед завершающей двойной кавычкой -, поэтому -F"!"
работает в более поздних версиях, но не в 3.2.
Обратная косая черта или одинарные -кавычки помогут избежать этого, т. е. ни \!foo
, ни '!foo'
не будут раскрываться. Конечно, вы также можете остановить это, полностью отключив расширение истории с помощью set +H
.
С двойными -кавычками все еще более странно. Внутри них обратная косая черта отключает расширение истории, но сама обратная косая черта остается на месте :
.$ printf '%s\n' "\!foo"
\!foo
В случае awk -F"\!"
это работает, потому что awk сам удаляет обратную косую черту.
Это не awk
делает это. Это оболочка. !
— это специальный символ оболочки.
Всегда цитируйте свои аргументы. например.
awk -F'!'