名前パターンマッチングを使用してディレクトリにファイルを渡す

名前パターンマッチングを使用してディレクトリにファイルを渡す

考慮する:

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

関連情報