Saya menjalankan Mac OSX dan mencoba menggunakan baris perintah untuk menemukan jumlah file yang saya miliki dengan nama yang sama.
Saya mencoba menggunakan perintah berikut:
find ~ -type f -name "*" -print | basename | sort | uniq -d > duplicate_files
Itu tidak bekerja! Ketika saya melakukan hal berikut:
find ~ -type f -name "*" -print > duplicate_files
Kemudian, duplikat_files berisi jalur semua file saya. Jadi saya pikir masalahnya adalah basename
- tidak menerima input standar. Saya kemudian mencoba yang berikut:
basename $(find ~ -type f -name "*" -print) > duplicate_files
tapi sekali lagi itu sepertinya tidak berhasil. Pencarian di internet sepertinya tidak menghasilkan banyak kegembiraan. Pikiran yang paling disambut.
Mengapa tidak menggunakan
find
fitur builtin untuk menampilkan hanya nama file:(mengasumsikan GNU
find
) atau setidaknya sesuatu seperti ini:basename
tidak dapat membaca melalui pipa atau memproses beberapa file sekaligus.ps. Tidak perlu menentukan
-name '*'
apakah Anda ingin membuat daftar semua file. Ini adalah opsi default.sumber
basename: unknown primary or operator
. Terima kasih atas tipnya-name "*"
-printf
bahkan di halaman manual posix. Tentang kesalahan dengan cara kedua, itu karena kesalahan ketik dalam jawaban saya. Tetap. Bisakah Anda mencobanya sekali lagi?-printf
saya mendapatkan-printf: unknown primary or operator
. Juga ketika saya memeriksa Unix dalam buku referensi Nutshell yang terdaftar sebagai opsi GNU / Linux - tidak mengatakan apa-apa tentang OSXman find
di konsol Anda :)Ini sepertinya bekerja untuk saya di OSX:
sumber
+
dari perintah itu?-a
opsi untuk menutupi kasus itu juga.Alternatif (tidak mengasumsikan baris baru dalam nama file):
sumber
Anda dapat menggunakan
xargs
denganbasename
untuk mendapatkan output yang diinginkan, seperti ini:sumber
Dengan versi terbaru
bash
yang menangani array asosiatif, berikut ini akan menangani nama path tambahan dengan baris baru yang disematkan:Ini tidak menggunakan utilitas eksternal.
sumber