Linux'ta boru kullanarak komut satırı argümanlarını nasıl belirleyebilirim?


7

Programlamayı zorlayacak bir acemiyim ve bu problemi nasıl çözeceğimi bilemiyorum.

İnternetten varsayılan dizine bir dosya indirdim ~/Downloads. Bu dosyayı başka bir dizine taşımak istiyorum ~/Documents.

İndirilen dosyanın tam adını bilmediğimden, hedefime ulaşmak için aşağıdaki komutu kullanabileceğimi düşünüyorum:

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

Hangi formal parametrenin değiştirileceğini nasıl belirleyebilirim. Benim durumumda, parametreyi kendim olarak atlamak [source]ve doldurmak istiyorum.[destination]~/Documents

Yanıtlar:


4

Sen istiyorsun xargs.

echo "foo" | xargs touch
ls -l foo

1
bu gerçekten iyi bir ipucu (OP'nin istediği şey) ancak bunun aslında belirli bir sorunun çözümü olmadığını not etmek isteyebilirsiniz
KennyPeanuts

+1. Sorunu çözmem için yeterli. Fakat @eldering daha şık bir çözüm sunar. :-)
Summer_More_More_Tea

2
Sadece boşluk içeren bir dosyaya çarpıncaya kadar.
Ignacio Vazquez-Abrams

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

Bu, adlarında boşluk olan dosyalarla çalışır.


14

Bash 'komut değiştirme operatörünü (backticks) olarak da kullanabilirsiniz.

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

Tek seferde birden fazla dosyayı taşımak istemiyorsanız, tek seferlik bir çözüm olarak. Bash adam sayfasına bakınız:

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.