2016-05-25 4 views
1

以外のものが含まれている印刷ファイル名は私にはありません「のみの数字が含まれている」すべてのファイル名を印刷したい:UbuntuのAWK - 桁

は、これはこれまでのところ私のコードです:

find . -type f | awk '!/[[:digit:]]/ {print}' 

は、これは私を見つけます任意の数字を含まないすべてのファイル。

私の問題は、それもディレクトリ名をチェックすることです。

最新コード:

find . -type f | awk '/.*\W.*/ {print}' 

私はそれがうまくいくと思うが、それはまた、チェックディレクトリ名、私はちょうどfindに頼るについてファイルについてのみ

+0

に関して検索パターンを否定するawkを使用するつもりはありません – piyushj

+0

文字と数字はありませんか? – Inian

+0

質問を編集しました。申し訳ありません問題を、あなたはそれを今確認できますか? – Piodo

答えて

4

私が正しくあなたを理解していれば:

ない "数字のみが含まれている" すべてのファイル名を印刷するには:

ませディレクトリが含まれていません
find . -type f -printf '%f\n'| awk '/[^[:digit:]]/ {print}' 


あなたは「数字や文字が含まれて」いないすべてのファイル名場合:

find . -type f -printf '%f\n'| awk '/[^[:alnum:]]/ {print}' 

をしかし、私はそれはドット.と空間を含めることが賢明だろうと信じています。通常、ファイル名に使用されている
文字:

find . -type f -printf '%f\n'| awk '/[^[:alnum:]. ]/ {print}' 

(否定)Shorthand Character Class\W_下線を含み、(GNU拡張である)以下ポータブルであろう。

それを含めるかどうかわかりません。

+0

私はその問題を編集しました。しかし、私は正規表現を '/.* \ W。* /'とその動作と入れ替えました。ありがとう! – Piodo

+0

@Piodo手紙と '\ W'についての拡張回答をお読みください。 –

0

どのようにケア?

find . -type f -name '*[^0-9]*' 
3

簡単な解決策はここ-not -regex

find . -type f -regextype sed -not -regex '^[./[:digit:]]\+$' 

SEDで!pの同等があるだろう。

あなたは非標準のファイル名を扱っている場合はない:@ BinaryZebraの答えで述べたように

find . -type f -regextype sed \ 
     -not -regex '^[./[:digit:]]\+$' \ 
     -print0 | while read -r -d '' line 
do 
    echo "$line" 
done 

サンプル出力

./binaryzebra8 
./foo 
./bingo bar 
./bar 
./file 
./romeo 
juliet --> non-standard file name 
./888/bingo88 
./\hash --> non-standard file name 

-printf "%f\n"はあなたのファイルのベース名を与えます[ manpage ]と表示される:

%f先頭のディレクトリが削除されたファイル名(最後の 要素のみ)。

実際には、検索結果を実際に処理する場合は、ファイルへのフルパスが必要です。

0

別の可能性は、ちょうど私が一致していない、最後の行と最初の行を質問を言い換えることが困難であるような単純なgrep -v

find . -type f | grep -v '^[0-9]*$'