ディレクトリの場合はファイル名に「/」を追加し、先頭の「./」を削除するstatコマンド形式

ディレクトリの場合はファイル名に「/」を追加し、先頭の「./」を削除するstatコマンド形式

次のコマンドを使用すると、現在のディレクトリに関連するすべてのディレクトリと、最後に変更されたエポック時間を一覧表示できます。

find . -exec stat -c '%n: %Y' {} \;

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

.: 1569247414
./a_file.txt: 1561624333
./some_folder: 1561624645
./some_folder/some_file.txt: 1561624645
./some_folder/another_file.txt: 1536557809

各エントリの先頭に表示される「./」を削除し、ディレクトリの場合は「/」を追加するにはどうすればよいでしょうか?

ボーナスとして、現在のフォルダーである最初のエントリ「.」を削除すると便利です。

乾杯

答え1

  • 深さ==0を-mindepth 1削除するために追加します.
  • 代替案:find *代わりに使用するfind .
  • ファイルをフォルダから分離する-type d ... -or -type f ...
  • 複数のファイルを に送信するに+は、 の代わりにを使用します。 複数のファイルを処理でき、処理速度が大幅に速くなります。\;stat

find * \
-type d -exec stat -c '%n/: %Y' {} + \
-or -type f -exec stat -c '%n: %Y' {} +

しかし...

-exec statまったく必要ありません!

  • 最終変更日を出力するには、finds bultin を使用します( は'sと同等になります)。-printf%Csstat%Y
  • -printf '%P'の代わりに を使用すると、各ファイル名の先頭の%pを削除することもできます。./

find . -mindepth 1 \
-type d -printf '%P/: %Cs\n' \
-or -type f -printf '%P: %Cs\n'

出力:

a_file.txt: 1561624333
some_folder/: 1561624645
some_folder/some_file.txt: 1561624645
some_folder/another_file.txt: 1536557809

関連情報