UNIXのコマンドで、最後がスペース(または改行)で終わっているファイルを探す方法を教えてください。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2005/12/26 15:33:29
  • 終了:--

回答(3件)

id:Kumappus No.1

くまっぷす回答回数3784ベストアンサー獲得回数1852005/12/26 15:48:02

ポイント30pt

find . -type f -regex ”^.* $”

でスペースで終わってるもの(確認済)

find . -type f -regex ”^.*¥n$”

で改行で終わってるもの(要確認、すみません)

が見つかるはずです。結果がみたい場合は末尾に -print 付けてください。

id:takoma

回答ありがとうございます。

ファイル名ではなく、ファイルの中身です。説明不足ですいません。

2005/12/26 15:54:42
id:dev_zer0 No.2

dev_zer0回答回数332ベストアンサー獲得回数252005/12/26 17:55:07

ポイント30pt

tailを利用してperlで作ってみました。


---- hoge.pl ここから----

#!/bin/perl

foreach $f ( @ARGV ) {

open(IN, ”tail -c1 $f |”);

$_ = <IN>;

if($_ eq ” ”) {

print ”last SP:$f¥n”;

} elsif ($_ eq ”¥n”) {

print ”last LF:$f¥n”;

}

close(IN);

}

---- hoge.pl ここまで----

上記をファイルに保存して、実行権限を付けて

./hoge.pl *

とすると、最後がスペースの場合は「last SP:ファイル名」

最後が改行の場合は「last LF:ファイル名」と出力されます。

ディレクトリの場合は、tailでエラーになります

id:takoma

回答ありがとうございます。

やはり、コマンドひとつでは駄目ですか…

2005/12/28 12:29:26
id:masanobuyo No.3

masanobuyo回答回数4617ベストアンサー獲得回数782005/12/27 19:53:11

ポイント30pt

最後が空白行で終わっているファイルを探すということでしょうか.単一のコマンドはおそらくないので,以下のようなシェルスクリプトにしてはいかがでしょう.実行するときはスクリプト名の後ろに調べたいファイル名を一つ以上列挙します.


#!/bin/sh

for f; do

[ -s $f ] && [ `tail -1 $f | wc -w` -eq 0 ] && echo $f

done


例: スクリプトの名前をscriptとすれば,

$ ./script *.c

a.c

b.c


wcは空白以外の文字の続きを単語として扱うという使用を利用しています.サイズが0のファイルは除外していますが,それを含めるならば”[ -s $f ] &&`”の部分を取り除きます.

id:takoma

回答ありがとうございました。

やはりコマンドひとつでは無理なようですね。

2005/12/28 12:30:28

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません