bash スクリプト内に同じ名前のファイルがある場合、特定のフォルダーを移動するにはどうすればよいですか?

bash スクリプト内に同じ名前のファイルがある場合、特定のフォルダーを移動するにはどうすればよいですか?

特定のファイルを見つけてフォルダーに移動するシェル スクリプトを作成しようとしています。

    #!/bin/sh
echo -n "/home/cosmoretro/movie/"
        read text2
while :
        do
        echo -n "Ara:"
        read text1
        b=$(find /home/cosmoretro 2>/dev/null -iname "$text1"*)
        IFS=$'\n'
    mv $b /home/cosmoretro/movie/"$text2"
done

ただし、検索したフォルダーと同じファイルがある場合は、ファイルも移動されます。

必要なのはフォルダの移動だけです。

答え1

このスクリプトを読むのも大変です。少し書き直した方が良いでしょうか?

#!/bin/sh
echo -n "/home/cosmoretro/movie/"
read destinationFileName

while :
do
    echo -n "Ara:"
    read sourceFileName
    sourceFile=$(find /home/cosmoretro -type d -iname "$sourceFileName" -print -quit 2> /dev/null)
    if [[ -z $sourceFile ]]; then
        echo "No file named $sourceFileName found"
    else
        mv -- "$sourceFile" /home/cosmoretro/movie/"$destinationFileName"  
    fi
done

私がやったこと:

  • destinationFileName代わりに、次のような説明的な名前を使用してください。text2
  • 適切にインデントする
  • findを指定してディレクトリのみを検索するようにします-type d。ファイルのみを移動する場合は、-type fの代わりにを使用します-type d
  • リダイレクトは重要ではないのでコマンドの最後に移動してください
  • find最初のファイルが見つかったら停止します( -quit)
  • *コマンド内の余分な部分を削除してくださいfind。そこに何が必要なのかわかりません。ファイル名にワイルドカードを含めるつもりなら(例えば、を検索するとfooが返されますfoobar)、ワイルドカードを挿入する必要があります。の中へ引用符、つまり"$sourceFileName*"
  • -z結果が空かどうかをテストして、ファイルが見つかったかどうかを確認します。
  • オプションの終了オプションを使用して、mvファイル名がで始まることを防ぎます。---
  • 空白文字がコマンドを中断するのを防ぐために引数を適切に引用符で囲みます(変更する必要はありませんIFS

関連情報