„Synchronizuj” zawartość za pomocą nazwy pliku

2

Dobra, cóż, przesłałem 5 zdjęć do Dropbox, a te są bezpośrednio z aparatu.

W innym kraju mój przyjaciel z internetem śmieci (który odzyskał płytę CD ze zdjęciami) skopiował obrazy do folderu na pulpicie i zaczął sortować obrazy; to znaczy usuwanie złych / niepotrzebnych obrazów. Nie mogę prosić go o przesłanie 5 koncertów na MOJE osobiste konto Dropbox, kiedy przesłanie mojego szybszego Internetu zajęło mi tydzień.

Czy istnieje oprogramowanie, które mogę uruchomić na jego komputerze z systemem Windows 8, aby pobrać listę nazw plików (katalog rekurencyjny, ponieważ dałem mu go posortowane w osobnych folderach dla każdego zdarzenia); który następnie uruchom ponownie na moim MacBooku Snow Leopard, by zobaczyć, które obrazy zostały usunięte na komputerze mojego przyjaciela; a następnie usuń je po mojej stronie.

Jeśli taki program nie istnieje, jakiej struktury mogę użyć do jego zaprogramowania (rozwijam na komputerze Mac)? A jakie wskazówki dałbyś mi?

qaisjp
źródło
Czy on reorganizuje obrazy (więc zmieniają foldery), czy tylko usuwa niektóre?
cpast
po prostu
usuwam
Nie bardzo, ponieważ systemy operacyjne używają różnych powłok. Jeśli oba działały w systemie Windows, po prostu uruchomiłbym dir / b / ad> output.txt na obu komputerach, a następnie użyłem narzędzia do różnicowania tekstu, aby uzyskać listę różnic. W tej chwili prawdopodobnie nadal możesz uruchomić to na swoim komputerze, a następnie uruchomić równoważne polecenie ls lub cokolwiek na komputerze Mac, ale format wyjściowy będzie inny. Może użyj Perla lub czegoś innego, aby wczytać oba pliki do dwóch skrótów i porównać je, a następnie wypisać różnicę?
Mark Allen
@ MarkAllen - W dir /b/s > filessystemie Windows może istnieć pewien sposób i niektóre polecenia awk/ sed-> xargsna komputerze Mac.
cpast
Zawsze mogłem napisać program, aby to zrobić, ale
qaisjp

Odpowiedzi:

1

Ta odpowiedź zapożycza się swobodnie na podstawie kilku komentarzy. Niech twój przyjaciel biegnie

dir /b/s/a-d > dir.out

Ty biegniesz

find . -print > find.out

Normalizuj dir.outi find.out:

  • Ustaw jednolite zakończenia linii (np. NL lub CRLF),
  • Usuń typowe prefiksy ( C:\Users\…i ./),
  • Zmień ukośniki odwrotne ( \) na ukośniki ( /) w dir.outi
  • Posortuj oba pliki.

Teraz zrób

comm dir.out find.out

(Możesz chcieć to potokować do pagera, takiego jak morelub less.) Dane wyjściowe będą składały się z trzech kolumn:

  1. Wpisy (nazwy plików) obecne tylko w pierwszym pliku ( dir.out). Nie powinno być żadnych; jeśli tak, twój przyjaciel załączył plik, którego od ciebie nie otrzymał, albo nie całkowicie go znormalizowałeś. (OK, w zależności od tego, jak dokładnie twój przyjaciel wykonał dirpolecenie, samdir.out plik może pojawić się w kolumnie 1.)
  2. Wpisy obecne tylko w drugim pliku ( find.out). Są to nazwy plików, które masz w systemie, ale twój przyjaciel nie wymieniał. Innymi słowy, są to pliki, które chcesz usunąć.
  3. Wpisy obecne w obu plikach. To powinno być takie samo jak dir.out.

Jeśli istnieją fałszywe negatywy z powodu niedopasowania wielkości liter („A” ≠ „a”), spróbuj commponownie wykonać polecenie z -fopcją. Prawdopodobnie powtórzysz również sortz -fopcją.

Teraz wpisz comm -13 dir.out find.out. Ta niewiarygodnie uszkodzona składnia mózgu oznacza „daj mi wszystkie normalne dane wyjściowe z wyjątkiem kolumn 1 i 3”, innymi słowy, tylko kolumnę wyjściową 2. Jak wskazano powyżej, jest to lista plików, które chcesz usunąć, więc podłącz ją do niego xargs rmlub coś w tym stylu.


Zakładam, że nie masz żadnych dzikich i szalonych znaków (takich jak spacja, cudzysłowy, „*”, „?”, „<”, „|” Itd.) W nazwach plików. (Nie powinno to stanowić problemu; aparaty zwykle używają nazw plików takich jak „DSCN1234.JPG”).

Scott
źródło
Czy w „Ujednoliceniu zakończenia linii (np. NL lub CRLF)” masz na myśli LF czy CRLF?
qaisjp
Czy możesz mi pomóc w Xargs? Pliki, które muszę usunąć, wysłałem do pliku todelete.out
qaisjp
xargs rm < todelete.outZrozumiałem : upewniłem się, że nie ma spacji na liście nazw plików (TextWrangler znajdź i zamień „” na „\”), aby działał poprawnie.
qaisjp
@qaisjp: Jeśli spojrzysz na wartość bajtu 10 (dziesiętną) (równoważnie, ósemkową 012 lub szesnastkową 0x0A) w większości tabel ASCII, zobaczysz, że jest ona identyfikowana jako Line Feed (LF). Wysyłany do mechanicznej drukarki zorientowanej na znaki (np. Typu teletechnicznego) zwykle powoduje przesunięcie papieru o jedną linię bez poruszania głowicą drukującą. Po wysłaniu do terminala wideo zwykle powoduje przesuwanie kursora w dół (lub przewijanie zawartości ekranu) bez przesuwania kursora w poziomie. (ciąg dalszy)
Scott
@qaisjp: Większość obecnie używanych systemów operacyjnych innych niż Unix korzysta z Carriage Return (CR) wraz z LF na końcach linii (EOL). Twórcy Uniksa zdecydowali, że ta funkcja CRLF jest na tyle powszechna, że ​​powinna być zakodowana w jednym bajcie, i że funkcja LF jest rzadko używana, więc „wymyślili” koncepcję znaku nowej linii, który wykonał koniec linia CRLF i została zakodowana z wartością bajtu 10. Patrz en.wikipedia.org/wiki/Newline i unicode.org/charts/PDF/U0000.pdf (co pokazuje, że 10 to zarówno LF, jak i NL). (ciąg dalszy)
Scott
0

Możesz to zrobić za pomocą GoodSync Connect (niepowiązany). Korzystanie z tej funkcji kosztuje, ale istnieje 30-dniowa wersja próbna, podczas której działa ona w bezpłatnej wersji.

  1. GoodSync instalujesz po obu stronach (istnieją wersje Mac, Windows i Linux).
  2. Skonfigurujesz GoodSync Connect, który ustanawia bezpośredni link, w którym informacje o katalogach są przesyłane za pośrednictwem mediatora, ale nie same pliki.
  3. Po swojej stronie konfigurujesz zadanie synchronizacji.
  4. Wybierz folder Dropbox ze zdjęciami.
  5. Twój przyjaciel kopiuje pliki z dysku DVD do katalogu. Wybierz ten folder za pomocą GoodSync Connect.
  6. Wybierz opcję Analiza w zadaniu synchronizacji. GS ustala teraz, że oba foldery są takie same. Spowoduje to utworzenie pliku porównawczego po obu stronach. (Ważny!)
  7. Następnie twój przyjaciel usuwa zdjęcia, których nie chce. (Lub, jeśli już to zrobił, usuwa zawartość folderu, w którym zapisał wszystkie zdjęcia - z wyjątkiem folderu _gsdata. Umieszcza tam zmodyfikowane foldery.)
  8. Wykonaj analizę, która wyświetli podgląd.
  9. Jeśli masz OK, zsynchronizuj. GoodSync wykona swoją magię.

Uwagi:

  • GoodSync wykryje ruchy i nazwy plików i folderów oraz powinno działać bez czknięcia. Więc nie będzie próbował przenieść plików. (Chyba że zawartość pliku została zmodyfikowana. Ale dlatego najpierw analizujesz!)
  • GoodSync usunie pliki, które usunął twój przyjaciel. Będą w Koszu.
  • Och, i wykonaj kopię zapasową przed tym. Tak poważnie. Lub wypróbuj to lokalnie.
  • A jeśli nie ufasz znajomemu, wyłącz serwer GoodSync Connect po zakończeniu. W przeciwnym razie znajomy zobaczy wszystkie twoje pliki. (Prawdopodobnie jest na to sposób, ale jeszcze go nie znalazłem.)
użytkownik 99572 jest w porządku
źródło