지금까지 나는 이것을 생각해 냈습니다.
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