
コマンドラインを使用してApple Finderでファイルを強調表示する優れた機能がありました。基本的には、osascriptを囲むラッパーです。
私からMac OS X:端末でファイルカラーラベルを変更する方法次のようになります。
# Set Finder label color
label(){
if [ $# -lt 2 ]; then
echo "USAGE: label [0-7] file1 [file2] ..."
echo "Sets the Finder label (color) for files"
echo "Default colors:"
echo " 0 No color"
echo " 1 Orange"
echo " 2 Red"
echo " 3 Yellow"
echo " 4 Blue"
echo " 5 Purple"
echo " 6 Green"
echo " 7 Gray"
else
osascript - "$@" << EOF
on run argv
set labelIndex to (item 1 of argv as number)
repeat with i from 2 to (count of argv)
tell application "Finder"
set theFile to POSIX file (item i of argv) as alias
set label index of theFile to labelIndex
end tell
end repeat
end run
EOF
fi
}
私はそれをviaに入れてvim .bash_profile
実行し、をsource .bash_profile
使用して関数を実行できましたlabel 2 /Users/brett/Desktop/test.txt
。完璧。
しかし、以前のPHP mysql_query(ステートメントをすべてPDOに更新して編集する必要があるファイルを視覚的に強調表示したい場合はどうすればよいですか?
普段は走り、
find /Users/brett/Development/repos/my-repo/ -name "*.php" -print0 | xargs -0 grep -Iil 'mysql_query(' | xargs -I '{}' -n 1 label 2 {}
しかし戻ってきます。
xargs: label: No such file or directory
走ろうとしなければならないという内容を読んexport -f label
だが、それも役に立たないようです。
.bash_profile関数でパス/ファイルをgrep
パイプする方法を知っている人はいますか?xargs
答え1
label
あなたと話すにはxargs
:
export -f label
find /Users/brett/Development/repos/my-repo/ -name "*.php" -print0 |
xargs -0 grep -Iil 'mysql_query(' |
xargs -I {} -n 1 bash -c 'label 2 {}'
label 2 {}
関数xargs
を直接呼び出すことはbash -c 'label 2 {}'
できないためxargs
、関数をlabel
親シェルの子プロセスとしてエクスポートし、子シェルをフォークしてそこで関数を処理します。bash
メモ:
~/.bash_profile
通常、非ログインシェルでは取得できないため、関数を呼び出しシェルにエクスポートする必要がexport -f label
あります。label
xargs
この
-c
オプションは、bash
実行するコマンドにオプション引数文字列から読み込むように指示します。
答え2
逆にやってみるのはどうですか? .xargs
xargs
find /Users/brett/Development/repos/my-repo/ -name "*.php" |
while IFS= read -r file; do grep -Iil 'mysql_query(' "$file" && label 2 "$file"
このコマンドはファイルを見つけ.php
、各ファイルをとして保存し$file
、実行しgrep
、grep
一致するものがあればそのファイルを関数に渡します。 Macがないのでテストできませんが、正常に動作します。
答え3
関数が定義されているシェルインスタンスの外部では関数を使用できません。この機能はにあるため、.bash_profile
ログインシェルでのみ使用でき、使用されているシェルから始まるシェルでは使用できません。関数は他のプログラムから呼び出すことはできませんxargs
。
関数を起動するためにシェルを呼び出すことに基づく解決策がありますが、最も簡単な解決策は関数のコードをスクリプトに入れることです。これにより、どこでも呼び出すことができます。
スタンドアロンスクリプトは親シェルに影響を与えることはできないため、すべての関数をスタンドアロンスクリプトにすることはできません(エクスポートされていない変数を表示できず、親シェルで変数を設定できないなど)。ここでは、関数は親シェル内で実行する必要がある操作を実行しないため、スクリプトにすることをお勧めします。