シェルスクリプトを使用して名前にスペースを含むファイルをコピーする

シェルスクリプトを使用して名前にスペースを含むファイルをコピーする

このスクリプトを使用して、共有ディレクトリ内のすべてのファイルを別のディレクトリに転送します。

cd /share
while :
do
  for allfiles in $(find /share/ -maxdepth 1 -type f -iname "*" -mmin +1);
do
  sudo mv "$allfiles" /schoolstore/
  done
  sleep 15s
done

ただし、ファイル名にスペースが含まれているとエラーが発生します。すべてのファイル名で動作するようにスクリプトをどこで変更する必要がありますか?

ベストアンサー1

私のコメントに記載されている他の質問に基づいて、私の提案は次のとおりです(テストされていません)。

cd /share

do
  for allfiles in $(find /share/ -maxdepth 1 -type f -iname "*" -mmin +1);
  do
    aveIFS="$IFS"; IFS=''; ls $file; 
    sudo mv "$allfiles" /schoolstore/
    IFS="$saveIFS"
  done

どういうわけか最適化する方法があるかもしれませんが、while止まらないようでコードの一部を削除しました。

言うまでもなく、これらの種類のコード(または問題のコード)を実行する前に、すべてのファイルをバックアップしてください。

findまたは、$ IFSを変更する代わりに、対応するフラグを持つ1つのコマンドを変更するだけです-exec。私が意味するものは次のとおりです(もう一度言いますが、テストされていません)。

find /share/ -maxdepth 1 -type f -iname "*" -mmin +1 -exec mv {} /schoolstore/ \;

おすすめ記事