2016-09-19 7 views
1

私はDOSの行末を持たないファイルを変更するスクリプトを作成しようとしていますが、DOSの行末は変更されていますが、 DOSの行末を含まないファイルを探します。 OSXコマンドfind -type f -exec file {} :動作しない

は私が

$ find -type f -exec file {} \; | grep -v CRLF 
find: illegal option -- t 
usage: find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] 
     find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression] 

をOSX上で、

./test/test.bat: ASCII text 

しかし、それは動作し、返し

$ find -type f -exec file {} \; | grep -v CRLF 

Linux上で動作する、以下のコマンドを取得している私はまた

を試してみました
$ find . -type f -exec file {} \; | grep -v CRLF 
cannot open `' (No such file or directory) 
cannot open `' (No such file or directory) 
cannot open `' (No such file or directory) 
cannot open `' (No such file or directory) 
... etc 

これを達成するためにOSXでfindと使用する必要のある構文がありますか?

+0

OSXはBSDベースであり、それには多くのGNUのものを持っていません。 osx findはgnu findではなく、異なるコマンドラインオプションを持っています。 –

+0

ここで唯一明白な非POSIX主義は、 'path'を省略し、' .'をデフォルトとして使用することです。 –

+0

これは実際のコマンドよりもカレントディレクトリのファイルと関係があります。 '{} 'が' '' 'に置き換えられているかのように、エラーメッセージは' file'から来ています。 – chepner

答えて

2

MacOS Xで使用されているBSD findでは、式の前にパスを指定する必要があります(その式には-type fが含まれています)。したがって、path[brackets]の外側に置く使用法のメッセージは、何かがオプションであることを示しています。オプションとして扱われるからファイル名を防止し、明示的に検索する場所として.を渡す


使用--

find . -type f -exec file -- '{}' + | grep -v CRLF 

... MacOS 10.11.6で明示的にテストされています。より良い次の点を考慮して、エラーを追跡する


find . -type f -exec bash -c ' 
    for result; do 
    file "$result" 2>/dev/null || { 
     printf "Unable to run file against %q\n" "$result" 
    } 
    done 
' _ {} + 
関連する問題