Вы могли сделать:
eval paste '<(sort -n ../data/file-'{A,B,C}'.dat)'
Или автоматизировать его как функцию
sort_paste() {
local n i cmd
n=1 cmd=paste
for i do
cmd="$cmd <(sort -n -- \"\${$n}\")"
n=$(($n + 1))
done
eval "$cmd"
}
sort_paste ../data/file-{A,B,C}.dat
(в некоторых ksh
реализации, необходимо заменить local
с typeset
)
Адаптироваться к любой произвольной команде, (и доказать это eval
может быть безопасным при надлежащем использовании) Вы могли сделать:
xproc() {
local n i cmd stage stage1 stage2 stage3
cmd= xcmd= stage=1 n=1
stage1='cmd="$cmd \"\${$n}\""'
stage2='xcmd="$xcmd \"\${$n}\""'
stage3='cmd="$cmd <($xcmd \"\${$n}\")"'
for i do
if [ -z "$i" ] && [ "$stage" -le 3 ]; then
stage=$(($stage + 1))
else
eval 'eval "$stage'"$stage\""
fi
n=$(($n + 1))
done
eval "$cmd"
}
xproc paste '' sort -n -- '' ../data/file-{A,B,C}/dat
С zsh
:
vim ./**/*(.)
Другие оболочки:
find . \( -name '.?*' -prune \) -o -type f -exec vim {} +
Чтобы открывать только (не скрытые) обычные файлы (не каталоги, символические ссылки , трубы, устройства, двери, розетки ...).
vim ./**/*(D-.)
Другие оболочки, GNU find
:
find . -xtype f -exec vim {} +
Также для открытия скрытых файлов (и обхода скрытых каталогов) и символических ссылок на обычные файлы.
И:
vim ./***/*(D-.)
другие оболочки:
find -L . -type f -exec vim {} +
также для просмотра символических ссылок при просмотре подкаталогов.
Если вам нужен только один уровень подкаталогов:
vim ./* ./*/*
Обратите внимание, что это хорошая привычка ставить перед глобусами префикс ./
в случае, если некоторые имена файлов начинаются с -
или +
.
(конечно, find
также работают в zsh
. Обратите внимание, что они могут запускать несколько экземпляров vim
, если список файлов большой).
В bash с shopt -s extglob
:
for file in **/**; do [[ -f "$file" ]] && vim "$file"; done
Обратите внимание, что согласно комментарию Стефана до Bash 4.3 это будет следовать за любыми символическими ссылками в покрытых каталогах.