이름 패턴 일치를 사용하여 디렉터리에 파일 전달

이름 패턴 일치를 사용하여 디렉터리에 파일 전달

고려하다:

$ 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:

관련 정보