我怎样才能替换成这个shell命令?

我怎样才能替换成这个shell命令?

我有一个find命令,我想将 GID 列表替换为其中。

这是命令:

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来获取stat信息,find已经这样做了。使用类似的东西(与输出相同ls -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

相关内容