bashscript에서 절대 경로를 사용하여 찾기 |

bashscript에서 절대 경로를 사용하여 찾기 |

bash 스크립트에서 재귀적으로 찾아야 합니다. 어디에서나 bash 스크립트를 호출할 수 있으므로 절대 경로를 사용해야 합니다. 때로는 다음과 같이 절대 경로가 매우 길어지고 출력이 지루해질 수 있습니다.

#!/usr/bin/env bash
find /long/absolute/path -type f | sort

그래서 나는 이렇게 했습니다:

#!/usr/bin/env bash
find /long/absolute/path -type f | xargs -L 1 -I @ echo $(basename @) | sort

그러나 이것은 기본 이름을 제공하지 않습니다. 내가 어디서 잘못되었는지 알아낼 수 있나요?

답변1

당신은 두 가지 면에서 실수를 저질렀습니다.

  1. 반 임의적인 find파일 이름을 전달하고 있습니다.파이프라인 - 으로 xargs, 다음으로 sort. 가능하면 -print0null 종료를 사용 find하거나 그 안에 작업을 삽입하세요 -exec.Maureen Lawns가 보여주듯이.

  2. 만약에파일 이름에 의 문자가 포함되어 있지 않으면 명령 대체를 사용하여 echo를 $IFS요청하고 있기 때문에 명령은 계속 실패합니다 xargs. 명령 대체는 basename출력에 대한 기본 이름을 요청하기 때문에 @존재하지 않을 수 있습니다. 더 가까운 것은 다음과 같습니다.

    find /long/absolute/path -type f | xargs -L 1 -I @ basename @ | sort
    

...이렇게 하면 xargs파일 이름을 에 인수로 삽입할 수 있습니다 basename.

답변2

이것은 나에게 효과적입니다.

find /some/long/path/ -type f -exec basename {} \;| sort

관련 정보