考慮する:
$ 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: