ディレクトリ内で最後に追加されたファイルを見つけて、そのファイルを別の場所に移動するための小さなシェルスクリプトを作成しようとしています。私が使用する場合:
ls -t ~/directory | head -1
次に、これを変数VARIABLE_NAMEに格納します。なぜ、次の方法でこれを〜/ otherdirectoryに移動できないのですか。
mv ~/directory/$VARIABLE_NAME ~/otherdirectory
この辺りを検索してGoogleで検索しましたが、ファイルパスで変数を使用する方法についての情報がないようです。これを行うためのより良い方法はありますか?
編集:スクリプトの一部は次のとおりです。
ls -t ~/downloads | head -1
read diags
mv ~/downloads/$diags ~/desktop/testfolder
スクリプトで次のことを実行できます。
diags=$(ls -t ~/downloads | head -1)
mv ~/downloads/"$diags" ~/desktop/testfolder
この場合、diags
にはls -t ~/downloads | head -1
の値が割り当てられ、mv
から呼び出すことができます。
次のコマンド
ls -t ~/downloads | head -1
read diags
おそらく意図したものではありません。readコマンドは、以前はコマンドからの入力を受け取りません。代わりに、stdinからの入力を待機します。これが、スクリプトが「ハング」すると信じている理由です。たぶんあなたは次のことをしたかったでしょう(少なくともこれはより良い解決策を提供するための私の最初の誤った試みでした):
ls -t ~/downloads | head -1 | read diags
ただし、パイプの各要素が個別のコマンドとして実行されるため、これも(alvitsで言及されているように)機能しません。したがって、変数diagsは親シェルの一部ではなく、サブプロセスの一部です。
したがって、適切な解決策は次のとおりです。
diags=$(ls -t ~/downloads | head -1)
ただし、後続のmvコマンドが失敗する可能性のある問題がさらにあります。