![이름 패턴 일치를 사용하여 디렉터리에 파일 전달](https://linux55.com/image/90470/%EC%9D%B4%EB%A6%84%20%ED%8C%A8%ED%84%B4%20%EC%9D%BC%EC%B9%98%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EB%94%94%EB%A0%89%ED%84%B0%EB%A6%AC%EC%97%90%20%ED%8C%8C%EC%9D%BC%20%EC%A0%84%EB%8B%AC.png)
고려하다:
$ ls
about-bar about-bar.pdf about-foo about-fou.pdf
$ for f in *about-*.pdf; do mv "$f" "$(echo $f | sed -E 's:(about-.*).pdf:\1:')";done
$ find .
.
./about-bar
./about-bar/about-bar.pdf
./about-foo
./about-fou
해당 디렉터리가 없는 파일을 건너뛰는 효율적인 방법은 무엇입니까? 이 경우 about-bar.pdf
이동만 가능하며 about-fou.pdf
이름이 변경되지는 않습니다(구체적으로는 .pdf
제거됨).
감사해요.
답변1
sed
여기서는 필요하지 않습니다. 표준 bash
표현식을 사용하여 확장을 ${file%.pdf}
제거 할 수 있습니다..pdf
$ ls
about-bar/ about-bar.pdf about-foo/ about-fou.pdf
$ for a in *.pdf
> do
> dir=${a%.pdf}
> if [ -d "$dir" ]
> then
> mv -i "$a" "$dir"
> fi
> done
$ ls
about-bar/ about-foo/ about-fou.pdf
$ ls *
about-fou.pdf
about-bar:
about-bar.pdf
about-foo: