Muni Bus

パソコンの操作方法や設定方法を忘れないようにメモしています。ブログを一回引っ越ししているので、所々表示がかなり乱れています・・・

【Linux】findコマンドの出力をlsコマンドの出力形式で得る

パイプを使ってxargsコマンドに出力を渡せばよい。以下の例のとおり、ファイル名に空白(0x20)が含まれるとうまく動作しないため、findコマンド、xargsコマンドにそれぞれ-print0オプションと-0オプションを付ける必要がある。

$ ls -lR ./test
./test:
合計 8
drwxrwxr-x 2 ○○ ○○ 4096 12月  2 19:37 石見舞菜香
drwxrwxr-x 2 ○○ ○○ 4096 12月  2 19:21 野口瑠璃子
./test/石見舞菜香:
合計 0
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:36 'ドラクエX メレアーデ.txt'
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:19  ライスシャワー.md
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:20  黒川あかね.txt
./test/野口瑠璃子:
合計 0
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:21 サクラチヨノオー.txt
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:21 デブラ.txt
$ find ./test -regex ".*\.txt$" | xargs ls -l
ls: './test/石見舞菜香/ドラクエX' にアクセスできません: そのようなファイルやディレクトリはありません
ls: 'メレアーデ.txt' にアクセスできません: そのようなファイルやディレクトリはあ りません
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:20 ./test/石見舞菜香/黒川あかね.txt
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:21 ./test/野口瑠璃子/サクラチヨノオー.txt
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:21 ./test/野口瑠璃子/デブラ.txt
$ find ./test -regex ".*\.txt$" -print0 | xargs -0 ls -l
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:36 './test/石見舞菜香/ドラクエX メレアーデ.txt'
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:20  ./test/石見舞菜香/黒川あかね.txt
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:21  ./test/野口瑠璃子/サクラチヨノオー.txt
-rw-rw-r-- 1 ○○ ○○ 0 12月  2 19:21  ./test/野口瑠璃子/デブラ.txt

findコマンドの-print0オプションの説明は以下のとおり(Ubuntu 22.04.3 LTSのマニュアルより)。

True; print the full file name on the standard output, followed by a null character (instead of the newline character that -print uses). This allows file names that contain newlines or other types of white space to be correctly interpreted by programs that process the find output. This option corresponds to the -0 option of xargs.

xargsコマンドの-0オプションの説明は以下のとおり(同上)。

Input items are terminated by a null character instead of by whitespace, and the quotes and backslash are not special (every character is taken literally).  Disables the end of file string, which is treated  like  any other argument.  Useful when input items might contain white space, quote marks, or backslashes. The GNU find -print0 option produces input suitable for this mode.