ext를 찾으면 cp 상위 디렉토리이고 그렇지 않으면 에코를 찾을 수 없습니다.

ext를 찾으면 cp 상위 디렉토리이고 그렇지 않으면 에코를 찾을 수 없습니다.

지금까지 나는 이것을 생각해 냈습니다.

if ls -1 ~/Downloads/*.mkv >/dev/null 2>&1
then
        echo 1
else
        echo 0
fi

하지만 제가 하고 싶은 일은 발견된 파일의 상위 디렉토리를 다른 위치에 복사하는 것입니다.

그냥 find 명령을 사용해야 할 것 같은 느낌이 듭니다.

답변1

경로에 공백이 포함되어 있으면 fede.evol의 답변이 실패합니다. find또는 의 출력ls 명령 대체에 사용하면 안 됩니다..

모든 파일 이름(개행 문자가 있는 경로 제외)을 처리하는 적절한 방법은 다음과 같습니다.

find /somewhere -name "*.mkv" -exec dirname {} \; | uniq | \
while IFS= read -r dir; do echo cp -- "$dir" /other/; done

이런 식으로 의 각 폴더가 /somewhere로 복사됩니다 /other/. 후행 슬래시는 필수입니다. 그렇지 않으면 대상을 항상 덮어쓰게 되기 때문입니다.

답변2

dirname FILE특정 파일의 디렉터리 이름을 가져오는 데 사용합니다 . 예를 들면 다음과 같습니다.

find DIRECTORY -name "*.mkv" -exec dirname {} \;

DIRECTORY 아래에 MKV가 있는 모든 디렉토리가 제공됩니다. 그런 다음 uniq복식을 얻지 않도록 통과시킨 다음 복사할 경우 복사할 수 있습니다 .

예를 들어

cp -a `find DIRECTORY -name "*.mkv" -exec dirname {} \; | uniq` DESTDIR

관련 정보