lsで相対パスを取得する方法は?


8

最後にダウンロードした2つのファイルを移動するには、次のようにします。

mv ` ls -rt ~/Downloads/ | tail -2 ` .

残念ながら、lsファイル名のみを提供します。上記のコードをどのように適応できますか?

(誰かが指摘する前に、私はの出力をパイプ処理する際の問題を認識していますls。これは、問題のファイル名がわかっている場合にのみ使用します。)


9
find代わりに使用してください。
Ignacio Vazquez-Abrams

回答:


10

わかりましたので、をあきらめない場合lsは、少なくともすべてにバックティックを使用する癖をつけxargsないようにしてください。

ls -rtd ~/Downloads/* | tail -n2 | xargs -I{} mv {} .

あなたxargsはバッククォートより私を喜ばせます。しかし、この一連のパイプとxargsバックティックの使用よりも技術的な理由がありますか、それとも好みの問題だけですか?
miracle173

この場合は2つのファイルしか表示していませんが、数千のファイルを移動したい場合、長すぎるコマンドラインを誤って作成しようとする可能性があります。
geocar 2012

また、数百のファイルの場合でも、すぐに作業を開始できます。バッククォートでは、サブコマンド全体が完了するまで待つ必要があります。
geocar 2012

また:あなたが使用しての習慣を蹴るために管理する場合ls、あなたはを活用することができますxargs -0
geocar

3
パースlsはお勧めしません:mywiki.wooledge.org/ParsingLs
Gilles Quenot 2012

8

findそこでGNUを使うことができます:

mv $(find ~/Download -mindepth 1 -maxdepth 1 -printf '%Ts %p\n' | sort -n | cut -d ' ' -f2- | tail -n 2) .

find -printfオプション:

  • %Ts時間をエポックとして表示する
  • %p ファイルパス

見る man find | less +/'^ *-printf'

編集する

ファイル名のスペースを処理する必要がある場合は、これを別の解決策としてお勧めします。

find -maxdepth 1 -printf '%Ts %p\n' |
    sort -n |
    cut -d ' ' -f2- |
    tail -n 2 |
    xargs -i% mv % .

find -printfオプションに関する説明を追加
Gilles Quenot 2012

1
私は興味があります:の-f2-代わりに使用する特別な理由はあり-f2ますcutか?2つ目のダッシュは何ですか?
Francesco Turco

1
確かにFrancesco Turcoは言ったようにman cut、複数のcolがある場合は最後まで印刷します。
Gilles Quenot、

POSTは、スペースを含むファイル名で機能するように編集されました。
Gilles Quenot、2012年

3

ls -rt ~/Downloads/*代わりに使用しますls -rt ~/Downloads/。ではls -rt ~/Downloads/*引数文字列の最初の(これが呼び出されたシェルによって展開されたファイル名グロブ)。したがって、ls -rtコマンドの引数としてパスのリストを取得すると、のオプションで指定した方法でソートされますls。対照的に、コマンドls -rt ~/Downloads/はディレクトリの内容を読み取ります~/Downloads/。これは、ディレクトリパスのないファイルのリストです。


2

zshの場合:

mv ~/Downloads/*(.om[1,2]) .

この(...)部分は、の優れた機能の1つであるグロビング修飾子と呼ばれますzsh。各修飾子(通常は1文字)を使用すると、ファイルの属性(タイプ、サイズ、時間...)に基づいて一致するエントリをフィルタリングしたり、展開される順序を変更したり、展開方法を変更したりできます。

上記には、次のものがあります。

  • . (ドット):通常のファイルのみを選択します(ディレクトリ、シンボリックリンクではありません...)
  • omOリストRDER メートルの odification時間。
  • [1,2]:最初の2つのエントリのみを選択します。

また、一致しない場合(他のシェルが誤って間違ったファイル/ディレクトリを移動する可能性がある場合)、コマンドは失敗することにも注意してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.