一致するID番号に基づいてファイルをフォルダに移動するBashスクリプト?

一致するID番号に基づいてファイルをフォルダに移動するBashスクリプト?

~/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}"末尾の文字(+スペース)を削除してから、先頭の文字(+スペース)を削除します。これにより、変数の数が保持されます。.jpgtarget="${target_part#Photo }"Phototarget

target次に、ファイルをの数字で始まるディレクトリに移動しますmv "$f" -t "${target} "*。これは、各数字で始まるファイル名が1つだけであり、ディレクトリであると仮定します。

追加情報

スクリプトにはいくつかの問題があります。まず、shebangが間違っています。むしろそう!#すべきです#!

第二に、単に誤字であるかどうかはわかりませんが、二重引用符はなければならず"、そうではありません

*また、パラメータ置換の${f%Photo*}理由や$sub変数が何を参照しているのか(割り当てられていない)、わかりません。

~/Desktop/a/*.jpg最後に、より簡単なパラメータ置換のためにforループを使用するよりも、ループに直接入ることを好みますcd

おすすめ記事