Saya mencoba memindahkan 8 file terakhir dari Documents direktori ke direktori lain, tetapi saya tidak ingin memindahkannya satu per satu ke direktori tertentu. Apakah mungkin untuk memindahkannya dengan pengganti tail perintah, tetapi untuk direktori, bukan file? Maksud saya, saya ingin melakukannya dengan sesuatu seperti tail -8 ./Documents | mv ./Anotherdirectory atau dengan mv tail -8 ./Documents ./Anotherdirectory .
Sebenarnya, saya sedang mencari cara cerdas untuk memindahkan 8 file terakhir (seperti yang tercantum dalam ls ) dengan cepat (tanpa mengetik setiap nama) ke direktori lain. Ada saran?
Jawaban yang Diterima:
Anda dapat menggunakan for , yang mengulang file secara berurutan, dan memungkinkan kita untuk menghindari penguraian output find atau ls , untuk menghindari masalah dengan spasi dan karakter khusus lainnya dalam nama file. Terima kasih banyak kepada @muru karena telah meningkatkan ini
i=0; j=$(stat ~/Documents/* --printf "%in" | wc -l); for k in ~/Documents/*; do if (( (j - ++i) < 8 )); then echo mv -v "$k" ~/AnotherDirectory; fi; done
Uji terlebih dahulu dengan echo , lalu hapus echo untuk benar-benar memindahkan file.
Sebagai skrip:
#!/bin/bash
i=0
j=$(stat ~/Documents/* --printf "%in" | wc -l )
for k in ~/Documents/*; do
if (( (j - ++i) < 8 )); then
echo mv -v -- "$k" ~/AnotherDirectory
fi
done
lagi, hapus echo setelah pengujian untuk memindahkan file secara nyata
Penjelasan
i=0memberi tahu shell untuk memulai iterasi pada 0j=$(stat ~/Documents/* --printf "%in" | wc -l )ini adalah pengaturan variabeljke bilangan bulat yang sama dengan jumlah total file dalam direktori. Terima kasih atas jawaban Serg atas pertanyaan saya sendiri tentang cara menghitung file dengan andal, apa pun karakter namanyado if (( (j - ++i) < 8 ))untuk setiap iterasi loop, uji apakah hasiljdikurangi berapa kali loop dijalankan kurang dari 8 dan jika yamv -v -- "$k" ~/AnotherDirectorypindahkan file ke direktori baru