SunOSベースのLinuxで「find」コマンドに代わるものはありますか?

SunOSベースのLinuxで「find」コマンドに代わるものはありますか?

Linuxのコマンドには、SunOSまたはSolarisのコマンドよりも多くのオプションがありますfindfind

find次のコマンドを使用したいと思います。

find data/ -type f -name "temp*" -printf "%TY-%Tm-%Td %f\n" | sort -r

-printfLinux システムではうまく動作しますが、SunOS システムでは同じコマンドに対応するオプションはありません。フォーマットで出力をカスタマイズしたいです"%TY-%Tm-%Td %f\n"

SunOSの代替案を提案してください。

ベストアンサー1

これはLinuxとは何の関係もありません。この-printf述部はGNU実装に固有のものですfind。 Linuxはオペレーティングシステムではなく、多くのオペレーティングシステム内のカーネルです。ほとんどのオペレーティングシステムはGNUユーザー領域を使用していましたが、現在Linuxを使用するほとんどのオペレーティングシステムは組み込まれており、基本的なコマンド(存在する場合)があります。

GNUfindコマンドは Linux より前のバージョンであり、ほとんどの Unix シリーズオペレーティングシステムにインストールできます。 Linuxが登場する前は、確かにSolaris(当時SunOSと呼ばれる)で使用されていました。

現在は、Solaris用のOracleパッケージとして提供されています。 Solaris 11では、コマンドが存在し、file/gnu-findutilsコマンド名が指定されますgfind(GNUの場合はfindシステム独自のコマンドとfind区別するため)。

これでパッケージをインストールできない場合の最良のオプションは、次のものを使用することですperl

find data/ -type f -name "temp*" -exec perl -MPOSIX -le '
  for (@ARGV) {
    unless(@s = lstat($_)) {
      warn "$_: $!\n";
      next;
    }
    print strftime("%Y-%m-%d", localtime($s[9])) . " $_";
  }' {} + | sort -r

ここでは、まだfind(Solaris実装)を使用して-execファイルのリストを渡しperl、各ファイルメタデータperlに対して操作を実行して、lstat()変更時間を10番目の要素として含むファイルメタデータを検索します($s[9])。 、localtime()ローカルタイムゾーン()として解釈し、フォーマットを指定し()、ファイルstrftime()print(またはループ変数)で$_何も指定せずに、perl失敗した呼び出しの最後のシステムエラーテキスト$!と同じように入力しますstderror(errno)

おすすめ記事