7

Я новичок в программировании оболочки и не знаю, как решить эту проблему.

Я только что скачал файл из Интернета в каталог по умолчанию ~/Downloads . Я хочу переместить этот файл в другой каталог, ~/Documents .

Поскольку я не знаю точного имени загруженного файла, я думаю, что могу использовать следующую команду для достижения своей цели:

ls -t ~/Downloads | head -1 | mv [source] [destination]

Как я могу указать, какой формальный параметр заменить. В моем случае я хочу опустить [source] и заполнить параметр [destination] как ~/Documents самостоятельно.

3 ответа3

17
ls -t ~/Downloads | head -1 | xargs -I  {} mv ~/Downloads/{} ~/Documents

Это будет работать с файлами, в именах которых есть пробелы.

14

Вы также можете использовать оператор подстановки команд bash '(backticks) как

mv `ls -t ~/Downloads | head -1` ~/Documents

как одноразовое решение, если вы не хотите перемещать несколько файлов за один раз. Смотрите страницу руководства bash:

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.
4

Вы хотите xargs .

echo "foo" | xargs touch
ls -l foo

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .