2010-03-31 10 views
0

Cette commande unix Je n'ai pas tout à fait travailler sur Mac encore - des idées qui doit être ajusté:ce script de shell d'une ligne ne fonctionne pas sur Mac - des idées comment résoudre ce problème?

find . | grep '.*\(css\|js\|rjs\|rhtml\|rb\)$' | sort | while read in; do printf "\n\n####\n# FILE: %s\n####\n\n" ${in} >> onebigfile; cat "${in}" >> onebigfile; done 

grâce

+1

Qu'est-ce qui ne fonctionne pas exactement? ça marche bien pour moi avec bash. – ghostdog74

Répondre

2

Le but de cette commande est de rassembler le contenu de tous les fichiers sous la répertoire en cours dont les noms se terminent comme indiqué (css ... rb) dans un fichier nommé onebigfile (avec des délimiteurs) IIUC.

Pour déboguer ce type de série de commandes canalisées, vous pouvez exécuter les commandes individuelles ou des groupes de commandes individuels pour essayer de voir ce qui se passe. Par exemple, essayez:

find . 
find . | grep '.*\(css\|js\|rjs\|rhtml\|rb\)$' 
find . | grep '.*\(css\|js\|rjs\|rhtml\|rb\)$' | sort 

ensuite obtenir une ligne de la sortie (par exemple ./dir/file.css), et essayer:

echo './dir/file.css' | while read in; do echo ${in}; done 
echo './dir/file.css' | while read in; do cat ${in}; done 
echo './dir/file.css' | while read in; do cat ${in} >> onebigfile; done 

Vous devriez bo alors en mesure de comprendre ce qui se passe .

Le problème peut être dû aux noms de fichiers et de répertoires contenant des espaces. La solution dans ce cas est d'utiliser la commande find -print0.