Saya ingin melakukan sesuatu seperti ini untuk memindahkan dua file yang terakhir diunduh:
mv ` ls -rt ~/Downloads/ | tail -2 ` .
Sayangnya, ls
hanya memberikan nama file. Bagaimana saya bisa mengadaptasi kode di atas?
(Sebelum seseorang menunjukkannya, saya sadar akan masalah dalam menyalurkan output dari ls
. Saya hanya akan menggunakan ini ketika saya tahu nama file yang dimaksud.)
find
sebagai gantinya.Jawaban:
Oke, jadi jika Anda tidak akan menyerah
ls
, maka setidaknya cobalah untuk keluar dari kebiasaan menggunakan backticks untuk semuanya, terutama ketikaxargs
itu lebih cocok:sumber
xargs
menyenangkan saya lebih dari backticks. Tetapi apakah ada alasan teknis untuk memilih urutan pipa ini danxargs
lebih dari penggunaan backticks atau apakah ini hanya masalah selera?ls
xargs -0
ls
tidak disarankan: mywiki.wooledge.org/ParsingLsAnda dapat menggunakan GNU di
find
sana:The
find -printf
pilihan:%Ts
untuk menampilkan waktu sebagai zaman%p
jalur fileLihat
man find | less +/'^ *-printf'
sunting
jika Anda perlu berurusan dengan spasi dalam nama file, saya sarankan ini solusi lain:
sumber
find -printf
opsi-f2-
alih-alih-f2
sebagai opsicut
? Untuk apa dasbor kedua?man cut
, itu mencetak sampai akhir jika ada lebih dari satu col.Gunakan
ls -rt ~/Downloads/*
sebagai gantils -rt ~/Downloads/
. Dalamls -rt ~/Downloads/*
argumen string pertama kali diperluas oleh shell (ini disebut nama file globbing ). Jadi Anda mendapatkan daftar lintasan sebagai argumen untukls -rt
perintah, yang kemudian mengurutkannya dengan cara yang Anda tentukan dengan opsils
. Sebaliknya, perintahls -rt ~/Downloads/
membaca konten direktori~/Downloads/
. Ini adalah daftar file tanpa jalur direktori.sumber
Dengan zsh:
Bagian
(...)
itu disebut kualifikasi globbing , salah satu fitur mematikan darizsh
. Setiap kualifikasi (biasanya karakter tunggal) memungkinkan untuk memfilter entri yang cocok berdasarkan atribut file (jenis, ukuran, waktu ...), mengubah urutan perluasannya, atau mengubah cara perluasannya.Di atas, kita punya:
.
(titik): pilih file biasa saja (bukan direktori, symlink ...)om
: O rder daftar oleh m waktu odification.[1,2]
: pilih hanya dua entri pertama.Perhatikan juga bahwa perintah akan gagal jika tidak ada kecocokan (di mana shell lain dapat secara tidak sengaja memindahkan file / dir yang salah).
sumber