質問: 以前に解決してもらった質問にはなるのですが、問題が新たに発生したため解決策を教えていただきたいです。 コマンドライン:↓ find $path -type d | grep -E -v -f list_test.txt | xargs ls -lgG $path : 検索ディレクトリ grep : パターンファイルでfind検索時除外するディレクトリ以下の情報指定 パターンファイル記述例 : /aaa/bbb/ccc/ddd/fff (/fff 以下の情報を除外) 表示結果:↓ /aaa/bbb/ccc/ddd/eee: 合計 60 -rwxrwxrwx 1 5424 1月 13 09:51 2016 a_01.txt -rwxrwxrwx 1 3748 1月 13 09:53 2016 a_02.txt -rwxrwxrwx 1 4732 2月 13 09:55 2016 a_03.txt -rwxrwxrwx 1 1323 2月 7 17:05 2016 a_04.txt -rwxrwxrwx 1 3456 3月 4 16:27 2016 a_05.txt /aaa/bbb/ccc/ddd/ggg: 合計 12 -rwxrwxrwx 1 638 11月 18 11:40 2015 b_01.txt -rwxrwxrwx 1 760 11月 26 12:00 2015 b_02.txt -rwxrwxrwx 1 25 10月 26 11:34 2015 b_02.txt ※表示結果の3列目はサイズですが、桁数が違っても終端を合わせるようになっています。 問題となるのはfindの結果をlsする際にディレクトリ名にスペースが入っているものがスペースごとに別のディレクトリとして取り扱われ、ls: cannot accessエラーとして認識されてしまうことです。以前は表示形式を変えてなんとか対応させたのですが、やはりこの表示形式を保ちたいのです。なんとかならないでしょうか? 変更後コマンド:↓ find $path -printf "%M %2n %10s %TY-%Tm-%Td %TH:%TM %p\n" |grep -E -v -f list_test.txt 表示形式変更時(現在):↓ -rwxrwxrwx 1 8326 2016-12-09 11:25 /aaa/bbb/ccc/ddd/eee/a_01.txt -rwxrwxrwx 1 3778 2016-09-09 12:32 /aaa/bbb/ccc/ddd/eee/a_02.txt -rwxrwxrwx 1 15902 2016-09-08 12:42 /aaa/bbb/ccc/ddd/eee/a_03.txt -rwxrwxrwx 1 1687 2016-01-20 18:13 /aaa/bbb/ccc/ddd/eee/a_04.txt -rwxrwxrwx 1 1927 2015-12-07 09:58 /aaa/bbb/ccc/ddd/eee/a_05.txt
回答: xargsの手前で改行区切りじゃ無くNUL文字区切りにします。 ``` find $path -type d | grep -E -v -f list_test.txt | tr '\n' '\0' | xargs -0 ls -lgG ``` 追記 == grep にも`-z`というNUL区切りオプションがありました。 ``` find $path -type d -print0 | grep -z -E -v -f list_test.txt | xargs -0 ls -lgG ``` コマンドによってNUL区切りオプションが色々なのがわかりにくいですね。