web-dev-qa-db-ja.com

Linuxでパイプを使用してコマンドライン引数を指定するにはどうすればよいですか?

私はシェルプログラミングの初心者であり、この問題を解決する方法がわかりません。

インターネットからデフォルトのディレクトリ~/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

これは、名前にスペースが含まれているファイルで機能します。

17
bryan

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.
14
Jaap Eldering