2017-01-12 6 views
1

shell scriptMakefileに変換し、すべてのスクリプトの操作を実行するにはmake allを使用してください。 picturesthumbsという2つのディレクトリがあります。スクリプトを実行する前にthumbsが空であり、picturesには.jpgのファイルが含まれています。最後に、これは私がMakefileに変換するshell scriptです:シェルからメイクファイルへの移行

#!/bin/bash 
DIR="thumbs" 
if [ "$(ls -A $DIR)" ]; then 
    p=$(find pictures/|grep "jpg"|cut -d"/" -f2) 
    for i in $p 
    do 
     m=$(ls -l pictures/$i | cut -d" " -f7) 
     n=$(ls -l thumbs/$i | cut -d" " -f7) 
     if [ "${m//':'}" -gt "${n//':'}" ] ;then 
      rm thumbs/$i 
      convert -thumbnail 100 pictures/$i thumbs/$i 
     fi 
    done 
else 
    find pictures/ |cut -d"/" -f2 | grep "jpg"| \ 
     awk '{system("convert-thumbnail 100 pictures/" $0 " thumbs/" $0)}' 
fi 
+2

シェルスクリプトに入れてからシェルスクリプトを実行します。 –

+0

*スクリプトをMakefileとして*書き直したいですか?その場合、POSIX 'make'に定義されている機能に自分自身を限定する必要がありますか、あるいはGNU' make'に依存したいですか? –

答えて

2

のMakefileからプログラムを呼び出すことができます。

$ cat a.sh 
echo From Makefile 
$ cat Makefile 
all: 
    ./a.sh 

テスト:

$ make 
./a.sh 
From Makefile 
+0

アップルのためのlolz ;-) –

1

あなたはGNU makeに依存していることを喜んでいる少なくともあれば、はるかに簡単にメイクファイルとしてあなたのシェルコードの動作を実装することができます。私はこれをあなたが求めているものと解釈します(特にGNU makeへのモジュロ依存性)。これはかなり機能的ラフカットです:

THUMBS = $(patsubst pictures/%,thumbs/%,$(wildcard pictures/*jpg*)) 

all: $(THUMBS) 

thumbs/%: pictures/% thumbs 
    convert -thumbnail 100 '$<' '[email protected]' 

thumbs: 
    mkdir -p '[email protected]' 

.PHONY: all 

注:

  • THUMBSは変数は、管理したいサムネイル画像の一覧に設定されたシェルグロブpictures/*jpg*の拡大に基づいております作りますpictures/の各出現をthumbs/に置き換えます。

    • パターンは、あなたのシェルコードに一致するように選択されていますが、おそらくあなたは本当に多くの彼らはあなたがそれらを心配する必要がある場合はトリッキーな問題を提示しようとしている中で、空白と$(wildcard pictures/*.jpg)
    • ファイル名のような何かをしたいです。あまりにも特定の他の特殊文字を含むファイル名、ビットそれほど
    • patsubwildcard関数はGNU拡張
    • ているとはいえます。また、allのルールにTHUMBSの定義をマージして、別の変数
    を避けることができ
  • thumbs/%: pictures/% thumbsのルールでは、GNU固有のパターンルール構文が使用されます。この特定の形式はPOSIX makeには表現しにくいです。

  • thumbsディレクトリが存在した場合に作成されますが、道

  • make all(または単にmake)でその名前の通常のファイルがある場合にエラーが発生します、すべてのアウトの日付サムネイルを更新します。それは.PHONYルールはただ注意することです(良いことですが)元のスクリプト

  • と同じ日付の比較ロジックに依存しません。これは、 "all"という実際のファイルの存在がmakeの操作を妨害するのを防ぎます。

+0

非常に良いと最高のソリューション。 –

関連する問題