grep 및/또는 awk를 사용하여 파일에서 여러 경로 이름을 선택하고 해당 파일을 삭제하려면 어떻게 해야 합니까?

grep 및/또는 awk를 사용하여 파일에서 여러 경로 이름을 선택하고 해당 파일을 삭제하려면 어떻게 해야 합니까?

다음 형식의 일부 출력이 있습니다.

foo: /some/long/path_with_underscores-and-hyphens/andnumbers1.ext exists in filesystem
foo: /another/one.ext exists in filesystem
bar: /another/path/and/file.2 exists in filesystem

이 파일들을 삭제해야 해요. 각 경로를 추출하고 파일을 삭제하려면 어떻게 해야 합니까? awk항상 행의 두 번째 요소이기 때문에 경로를 캡처하는 것이 가능하다는 것을 알고 있지만 캡처를 시작하고 rm.

답변1

단순한awk+xargs방법:

awk '{ print $2 }' file | xargs -n1 rm

답변2

다른 답변 외에도:

파일 경로에 공백이 포함되어 있습니까? 그렇다면 제대로 처리해야 합니다. GNU sed를 통해 올바른 파일 경로를 얻으려면 다음 명령을 사용해 보십시오.

sed -r 's/^.*: (.*)/\1/;s/^(.*) exists in filesystem$/\1/' file

또는 POSIX:

sed -e 's/^.*: \(.*\)/\1/' -e 's/^\(.*\) exists in filesystem$/\1/' file

다음과 같은 파일이 있는 경우:

foo: /some/long/path_with_underscores-and-hyphens/andnumbers1.ext exists in filesystem
foo: /another/one.ext exists in filesystem
bar: /another/path/and/file.2 exists in filesystem
123 ret: /another/path/and/file 2 exists in filesystem
123 ret: /another/space path/and/file 2 exists in filesystem

결과는 다음과 같습니다:

/some/long/path_with_underscores-and-hyphens/andnumbers1.ext
/another/one.ext
/another/path/and/file.2
/another/path/and/file 2
/another/space path/and/file 2

파일을 삭제하려면 xargs위와 같이 사용하되 다음 -d옵션을 사용하세요.

sed pattern | xargs -n1 -d '\n' rm

답변3

awk그 기능이 있습니다 system().

awk '{ system("echo rm "$2) }' list

파일 이름에 공백이 없을 때 아래 방법을 시도하면 위의 내용이 맞습니다.

awk '{gsub(/^.*: | exists in filesystem$/,""); system("echo rm \"" $0"\"")}' list

위의 방법 중 어느 것도 파일 이름(있는 경우)에서 개행 문자를 감지할 수 없습니다.

시험 실행을 위해 제거되었습니다 echo.

관련 정보