find . -perm -u+x,g+x,o+x -type f -exec grep -i -l -H -E '#!/bin/bash|#!/bin/sh' {} \; 2>/dev/null 1>/$user_scripts
내 임무는 4개 폴더에서 N명의 사용자에 대해 존재할 수 있는 스크립트를 찾는 것입니다. ssh를 사용하고 위 명령을 실행하여 나중에 사용할 파일 목록을 생성하겠습니다. 파일 확장자가 .sh 및 .bash이고 #!/bin/bash|#!/bin/sh가 포함되지 않은 일부 스크립트를 찾을 수 없습니다.
이 점을 개선해야 하지만 관리 권한이 없는(특수 소프트웨어/라이브러리 없음) Solaris 서버에서 실행할 수 있는 것을 찾는 데 어려움을 겪고 있습니다. 가능하다면 모든 사용자의 모든 목록에 불필요하게 나타나는 또 다른 스크립트를 실행하지 않아도 되기를 바랍니다.
기본적으로 같은 줄에 일종의 "If(find or grep)"가 필요합니다. 가능합니까?
답변1
명령의 다른 부분을 OR로 연결하여 이를 수행할 수 있습니다 find
. 선택 기준을 모든 파일에 대한 필수 요구 사항(권한 등), 이름이 지정된 파일 또는 적절한 헤더가 있는 파일의 세 부분으로 나누는 것이 좋습니다.
이는 다음과 같이 표현될 수 있습니다 find
(가독성을 위해 여기에서는 여러 줄로 나눕니다).
find . -perm -u+x,g+x,o+x -type f \(
-name '*.sh' -o
-name '*.bash' -o
-exec grep -il -E '^#!/bin/bash|^#!/bin/sh' {} \;
\) 2>/dev/null >/$user_scripts