ZSHの **/*(.) はちょ便利。ディレクトリ以下全ファイル一括処理が一瞬。 ただ、あまりにファイルが多すぎると
% file2 **/*(.) zsh: argument list too long: file2
と怒られて悲しい。ってなときは最上位のディレクトリごとに分割 して
% for d in *(/); do file2 $d/**/*(.) done
とするとたいていうまくいく。ってときに、直前のコマンドの
**/ の部分を最上位ディレクトリごとに分割して実行する
関数。
function bydir () {(
for d_bydir in *(/); do
prev="$(print `fc -ln -1`)"
eval "${prev:s,**,${d_bydir}/**,}"
done
)}
つかいかた。
% file2 **/*(.) zsh: argument list too long: file2 「げっ」 % bydir
でOK。でもカレントディレクトリ以下しか使えないな。要改善。 ってほど頻度も高くなさそうだ。ぽい。
:
:
:
:
困った。気になって作ってしまった。やはり完ぺきをめざすとちっとも 御手軽じゃなくなる。
function bydir () {(
: ${(A)p::=`fc -ln -1`}
i=0
while [[ $i -lt $#p && "$p[$((++i))]" != *\*\*/* ]]; do ; done
d=${p[$i]%%\*\**}"*(/)"
new=${p[$i]#*\*\*/}
for dir in ${~d}; do
p[$i]="$dir/**/$new"
cmd=`print "$p"`
eval "$cmd"
done
)}
叱咤激励感想ツッコミはゲストブックへ
Generated with mkdiary.rb