Я получаю чувство, что Вы - очень "каталог, ориентированный", и, в этом случае, этот мог бы комплект Ваш менталитет лучше.
(Но честно говоря, я думаю, что это - плохая идея в целом, Вы хотели бы, чтобы команды были глобальны.)
В .bashrc
, поместить alias go="./.cmd"
(затем source ~/.bashrc
).
Затем в каждом таком каталоге, помещает названный сценарий .cmd
, затем chmod +x .cmd
, затем просто go
сделайте свою вещь.
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt"
коротко для:
find . \( \( -type f -a -name "*.htm*" \) -o \ \( -name "*.js*" \) -o \ \( -name "*.txt" \) \ \) -a -print
Таким образом, потому что никакой предикат действия не указан (только условия), a -print
действие неявно добавляется для файлов, которые соответствуют условиям.
(и, между прочим, который распечатал бы нерегулярный .js
файлы ( -type f
только относится .htm
файлы)).
В то время как:
find . -type f -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \ -exec sh -c 'echo "$0"' {} \;
коротко для:
find . \( -type f -a -name "*.htm*" \) -o \ \( -name "*.js*" \) -o \ \( -name "*.txt" -a -exec sh -c 'echo "$0"' {} \; \)
Для find
(как на многих языках), И (-a
; неявный при исключении) имеет приоритет ИЛИ (-o
) и добавление явного предиката действия (здесь -exec
) отмены -print
неявное действие, замеченное выше. Здесь, Вы хотите:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) \
-exec sh -c 'echo "$0"' {} \;
Или:
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) -exec sh -c '
for i do
echo "$i"
done' sh {} +
Постараться не выполнять тот sh
на файл.
Это - подразумеваемые скобки. Добавьте явные скобки. \(
\)
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) -exec sh -c 'echo "$0"' {} \;
или использование xargs (мне нравится xargs, я нахожу это легче, но по-видимому не как портативное).
find . -type f \( -name "*.htm*" -o -name "*.js*" -o -name "*.txt" \) -print0 | xargs -0 -n1 echo