私はシェルプログラミングの初心者であり、この問題を解決する方法がわかりません。
インターネットからデフォルトのディレクトリ~/Downloads
にファイルをダウンロードしました。そのファイルを別のディレクトリ~/Documents
に移動したいと思います。
ダウンロードしたファイルの正確な名前がわからないので、次のコマンドを使用して目標を達成できると思います。
ls -t ~/Downloads | head -1 | mv [source] [destination]
置き換える仮パラメータを指定するにはどうすればよいですか。私の場合、[source]
を省略し、[destination]
パラメーターを~/Documents
として自分で入力します。
xargs
が必要です。
echo "foo" | xargs touch
ls -l foo
ls -t ~/Downloads | head -1 | xargs -I {} mv ~/Downloads/{} ~/Documents
これは、名前にスペースが含まれているファイルで機能します。
Bashのコマンド置換演算子(バッククォート)を次のように使用することもできます。
mv `ls -t ~/Downloads | head -1` ~/Documents
複数のファイルを一度に移動したくない場合のワンショットソリューションとして。 bashのmanページを参照してください。
Command Substitution
Command substitution allows the output of a command to replace the command name. There
are two forms:
$(command)
or
`command`
Bash performs the expansion by executing command and replacing the command substitution
with the standard output of the command, with any trailing newlines deleted. Embedded
newlines are not deleted, but they may be removed during Word splitting. The command sub‐
stitution $(cat file) can be replaced by the equivalent but faster $(< file).
When the old-style backquote form of substitution is used, backslash retains its literal
meaning except when followed by $, `, or \. The first backquote not preceded by a back‐
slash terminates the command substitution. When using the $(command) form, all characters
between the parentheses make up the command; none are treated specially.
Command substitutions may be nested. To nest when using the backquoted form, escape the
inner backquotes with backslashes.
If the substitution appears within double quotes, Word splitting and pathname expansion
are not performed on the results.