~/Desktop/a/ には、次のパターンのファイルとフォルダがあります。
500 photodir
Photo 500.jpg
1000 origindir
Photo 1000.jpg
.jpgをそのフォルダに移動し、IDで数字をタグ付けしたいと思います。
500 photodir/Photo 500.jpg
1000 origindir/Photo 1000.jpg
これまでのコードは次のとおりです。
!#/bin/bash/
for f in ~/Desktop/a/*.jpg
do
base=“${f%Photo*}”
mv "$f" "$base/"
mv "$sub/$f"* "$base/$sub/"
done
ベストアンサー1
#!/bin/bash
cd ~/Desktop/a/
for f in *.jpg; do
target_part="${f%.jpg}"
target="${target_part#Photo }"
mv "$f" -t "${target} "*
done
説明する
そこに2つありますパラメータの置換ここで起こった。まず、ファイル名からtarget_part="${f%.jpg}"
末尾の文字(+スペース)を削除してから、先頭の文字(+スペース)を削除します。これにより、変数の数が保持されます。.jpg
target="${target_part#Photo }"
Photo
target
target
次に、ファイルをの数字で始まるディレクトリに移動しますmv "$f" -t "${target} "*
。これは、各数字で始まるファイル名が1つだけであり、ディレクトリであると仮定します。
追加情報
スクリプトにはいくつかの問題があります。まず、shebangが間違っています。むしろそう!#
すべきです#!
。
第二に、単に誤字であるかどうかはわかりませんが、二重引用符はなければならず"
、そうではありません“
。
*
また、パラメータ置換の${f%Photo*}
理由や$sub
変数が何を参照しているのか(割り当てられていない)、わかりません。
~/Desktop/a/*.jpg
最後に、より簡単なパラメータ置換のためにforループを使用するよりも、ループに直接入ることを好みますcd
。