Shell

如何替換這個 shell 命令?

  • December 15, 2018

我有一個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依次替換到命令中,以便為每個條目創建單獨的輸出和錯誤文件?

您無需呼叫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 find 手冊的第 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

引用自:https://unix.stackexchange.com/questions/44406