Saya memiliki direktori "myfiles" besar yang penuh dengan dokumen lain-lain dan tidak ingin mengubah strukturnya.
Karena itu saya membuat (beberapa) direktori lain untuk setiap kelas dokumen. Sebagai contoh, saya memiliki "gambar" direktori yang memiliki symlink untuk setiap .jpg
atau .cr2
file dalam "myfiles" direktori ditambah file deskriptif lain untuk setiap symlink (dengan nama file yang sama) dengan deskripsi dan metadata lainnya. Symlinks di direktori / images mungkin memiliki nama yang berbeda dari file tertaut asli.
Saya mencoba menemukan cara paling sederhana untuk memastikan setiap dan semua file gambar dalam direktori "myfiles" memiliki symlink ke direktori "gambar".
Lihat contoh struktur folder
/myfiles/a.doc
/myfiles/b.jpg
/myfiles/c.cr2
/myfiles/d.mov
harus menghasilkan
/images/b_800x600.jpg
/images/b_800x600.desc
/images/c_3820x5640.cr2
/images/c_3820x5640.cr2
command-line
files
find
symlink
Robert Alexander
sumber
sumber
find /myfiles -type f
file kemudian gunakanfind /images -type l -exec readlink {} \; | egrep myfiles
untuk mendapatkan daftar file yang disinkronkan/images
kemudian beralih pada hasil yang dilakukansed
pada masing-masing untuk menghapus path di file pertama yang Anda simpan karena mereka sudah memiliki symlink dan file yang tersisa adalah file yang tidak memiliki symlink.ls -l
Anda dapat melihat jumlah hardlink di kolom kedua.rm
dir symlink tersebut dan gunakanpax -rwl -s "\|.*regex|modifes_filename|" /path/to/myfiles/*.jpg /path/to/jpg_dir
misalnya untuk mendapatkan hardlink dengan nama file yang diubah secara terprogram hanya untuk mereka yang file yang cocok dengan jpg Anda. Anda bisa mendapatkan lebih banyak dari itu - seperti batching berdasarkan waktu perubahan dan lainJawaban:
Jika saya menggarisbawahi pertanyaan dengan benar, Anda memerlukan file di file saya yang tidak memiliki symlink dalam gambar:
Ada peringatan dengan pendekatan ini jika Anda memiliki file a.jpg di direktori myfiles / 1 dan Anda memiliki symlink ke file tersebut di direktori images / 3 atau hanya dalam gambar / file tidak akan dilaporkan dengan symlink yang hilang.
sumber
Saya berasumsi bahwa file-file di bawah
myfiles
bukanlah tautan simbolis, dan tidak ada nama file yang mengandung baris baru. (Pendekatan saya masih bisa berfungsi jika asumsi-asumsi ini dilanggar tetapi semakin rumit.) Saya juga berasumsi bahwa Anda memilikireadlink
utilitas umum dan mendukung-f
jalan kanonik, yang merupakan kasus di Linux (baik GNU dan BusyBox), tetapi tidak pada mis OSX.Buat daftar file, dan urutkan untuk ukuran yang baik:
Buat daftar target tautan simbolik, dengan jalur absolut.
Daftar file yang tidak ditautkan:
Jika Anda menggunakan shell yang mendukung substitusi proses, Anda bisa memasukkan semuanya dalam satu perintah:
Jika tautan di bawah
/images
adalah mutlak, Anda dapat menggunakanreadlink
tanpa-f
opsi, yang tersedia di * BSD dan OSX.sumber
comm
perintah Anda, tetapi sekarang saya tidak akan melihat Anda sudah melakukannya. Namun, pengalihan darisort
tidak masuk akal; maka proses substitusi tidak akan menghasilkan apa-apa. Selain itu, Anda dapat menambahkan banyak direktori di sebelahnya/images
jika Anda ingin menemukan file/myfiles
yang tidak disinkronkan dari salah satu dari sejumlah direktori di samping/images
.readlink -f