PC内のすべてのファイルのリストを作成します。

FILES=$(find . -type f -name "*" -printf "%s/%f\n" | sort -n) 

出力は次のようになります。

"size/file_name" 56872/file.txt 98566/test 1000254/foo 

PCでエラーが発生します

find: -printf: unknown primary or operator 

解決策はありますか?

コメント

  • 質問を展開して、ディレクトリ内のファイル名を表示してください。
  • さらに重要なのは、PCで実行されているシステムのタイプと、使用されているfindのバージョンは何ですか?

回答

-printfオプションがPOSIX find 。これは、GNU find の機能です(例:Linux)。

特定の実装使用しているものは表示されていません。拡張機能のないPOSIXである可能性があります。たとえば、 FreeBSD OSX にはありません。

それがなければ、いくつかの代替手段を使用できます。たとえば、これ(埋め込みブランクなどは処理されませんが、ツールについてはほとんど想定されません):

find . -type f -exec ls -ld {} \; | awk "{ gsub("^.*/","",$9); printf "%s/%s\n", $5, $9; }" 

利用可能なツールに関する詳細情報があれば、(通常は)ソリューションを改善することができます。

コメント

  • お願いします。上記のように出力" file_size / file_name "のリスト?
  • なぜls find ... -print0を使用して、xargs -0r stat ...にパイプする方がはるかに良い場合は? statのGNUバージョンとFreeBSDバージョンの両方に、出力をフォーマットするための(残念ながら異なる/互換性のない)オプションがあり、OPの要求に応じてsize/filenameを表示できます。 。
  • OPは、特定のプラットフォーム固有のソリューションを想定できる情報を提供しませんでした。

回答

findおよびxargsとGNU stat

find . -type f -print0 | xargs -0r stat -c "%s/%n" 

GNU findprintfとにかく(ただし、statfind ... -printfであるファイルについて見つけることができることがあるため、他のコンテキストで役立つ場合があります。表示できません。

FreeBSD &ただし、Mac OSXは別の話です。

findおよびxargsとFreeBSD( Mac OS X)stat

find . -type f -print0 | xargs -0r stat -f "%z/%N" 

オプションで、出力を

は、各ファイル名の先頭にある./を削除します。

FreeBSDテストVMからのサンプル出力:

# find . -type f -print0 | xargs -0r stat -f "%z/%N" | sed -e "s:/./:/:" | head 149/.k5login 254/.profile 1169/.cshrc 297/.login 5589/.history 171/.ssh/known_hosts 1803/.ssh/authorized_keys 6699/.bash_history 368/.bashrc 4065/.viminfo 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です