このシェルコマンドをどのように変更できますか?

このシェルコマンドをどのように変更できますか?

findGIDのリストを置き換えるコマンドがあります。

これはコマンドです:

find / -follow \( -group 39 -o -acl_group 39 \) -exec ls -ln {} \; 2> $HOME/error.39.log 1> $HOME/results.39.log

次の内容を含むファイルもあります。

3  
100005  
21  
7   

ファイル内の各項目を順番にコマンドに置き換えて、各項目findに対して別々の出力ファイルとエラーファイルを生成するにはどうすればよいですか。

答え1

情報をls取得するために電話する必要はありません。すでに完了しているからです。次のように使用します(出力と同じ)。statfindls -ln

find -follow \( -group 39 -o -acl_group 39 \) -printf '%M  %n %U %G %s %Cb %Cd %CH:%CM %p\n'

フォーマットディレクティブの詳細については、GNU検索マニュアルのセクション3.2.2を参照してください。

編集する

ファイルの複数のグループIDに適用するには:

while read; do
  find -follow \( -group $REPLY -o -acl_group $REPLY \) \
    -printf '%M  %n %U %G %s %Cb %Cd %CH:%CM %p\n'      \
    1> $HOME/results.$REPLY.log                         \
    2> $HOME/error.$REPLY.log
done < group_id_file

答え2

for文はどうですか?それは次のとおりです。

for f in `cat file_with_entries`; do
    find -follow \( -group $f -o -acl_group $f \) -exec ls -ln {} \; 2> $HOME/error.$f.log 1> $HOME/results.$f.log
done

関連情報