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