2016-08-07 8 views
1

parent-folderという名前のフォルダーが次のようになっているとします。親には子が含まれ、各子にはstyle.cssファイルが含まれます。それぞれのCSSファイルの名前を_style.scssに変更するbashスクリプトが必要です。また、スタイルシートのそれぞれに@import 'glue1';を追加する必要があります。Bashループスルーフォルダーと名前を変更するファイル

parent-folder 
    child-folder 
     style.css 
    child-folder 
     style.css 
    child-folder 
     style.css 

これは私がまとめたものです。私はbashの知識が不足しているため、これを理解するのに苦労しています。私はスクリプトを書くのが本当に難しいと思っています。そのスクリプトがparent-folderから呼び出されない何

for file in */**; do 
    echo "@import 'glue1';"|cat - $file > /tmp/out && mv /tmp/out $file 
    echo ${file/%.css/.scss} 
done; 

  1. それぞれをループし、一時ファイルを作成することによって、それぞれのCSSファイルへのすべてのサブディレクトリ
  2. プリペンド@import 'glue1';
  3. の前で[この] ${file/%.css/.scss}と呼ばれる技術とどのように私は_(アンダースコア)を先頭に追加します私の質問は何ですか...

    ある.scss

.cssに代わる新しいファイルルートをエコーファイル名?

+0

'find'のmanページを読んでください。これは、このような種類のタスクのためのものです。 – boardrider

答えて

1

${file/%.css/.scss}は、parameter expansionと呼ばれます。接尾辞.cssを接尾辞.scssに置き換えています。あなたは、パラメータ展開などのようないくつかの他の機能の組み合わせを使用して、名前の変更を行うことができます:

mv $file $(dirname $file)/_$(basename ${file/%.css/.scss}) 

しかし、これはやり過ぎのように思えます。あなたはすべてのファイルに関係なく、彼らが最初に呼ばれたかの_style.scssを名前を変更する必要が知っている場合は、やるだけのことができます:

mv $file $(dirname $file)/_style.scss 

シンプル:実際には

、あなたはファイルのみを変更したい場合style.css(現在のスクリプトではすべてのサブディレクトリ内のすべてのファイルが変更されています)が既にstyle.cssと呼ばれていることがわかっている場合、これはもっと簡単な方法で、現在のディレクトリの各サブディレクトリそれらのサブディレクトリ):

for dir in */; do 
    echo "@import 'glue1';" | cat - "${dir}"style.css > /tmp/out && mv /tmp/out "${dir}"_style.scss 
done 

またはファイルに書き込み、その後、古い1(これは私に多くの標準的な見えます)を削除します。

for dir in */; do 
    echo "@import 'glue1';" >"${dir}"_style.scss 
    cat "${dir}"style.scss >>"${dir}"_style.scss 
    rm "${dir}"style.scss 
done 
+0

'$ {dir}'は、グロブと単語分割を防ぐために、二重引用符で囲む必要があります。 –

+0

絶対に真であり、修正されています。 – leekaiinthesky

0

を使用すると、ファイルに行を付加するために名前を変更し、sedためfinddirnameコマンドを必要とするように見えます内容:

for i in `find . -name 'style.css'`; do 
    sed -i '1s;^;@import '"'"'glue1'"'"'\;\n;' $i; 
    mv $i "`dirname $i`/_style.scss"; 
done 

あなたはstyle.css以外のファイル名で作業する必要があります場合は、あなたはまた、ファイル名のみを抽出しbasenameコマンドが必要な場合がありますので、それはsomewhaですtはdirnameの反対です。

また、ファイル名のパターンを置き換えるコマンドがありますが、あなたのケースではオーバーコンプリートと思われます。

関連する問題