Jaki jest sens touch
polecenia? Wiem, że mogę tworzyć przy nim puste pliki, ale tak też jest w przypadku echo -n
.
W przeciwnym razie, dlaczego ktoś musiałby zmieniać znaczniki czasu pliku? O ile nie stworzy fałszywego wrażenia na temat wieku pliku, nie widzę żadnego innego zastosowania, a ten nie jest uzasadniony (z mojego punktu widzenia).
command
timestamps
touch
Quora Feans
źródło
źródło
echo -n > filename
można uruchomić następujące polecenia:>filename
Unless to create the false impression about the age of a file
. Niepotrzebne fałszywe wrażenie. Co jeśli chcesz zmienić czas modyfikacji? Może być przydatny w skryptach. Ten skrypt w dużej mierze zależy odtouch
polecenia i jest bardzo wygodny i prosty.tar
(lub inne programy dezarchiwizujące) po rozpakowaniu archiwum. Zasadniczo ustawiają czas modyfikacji pliku na czas z archiwum, a nie na czas wyodrębnienia archiwum, a jest to pożądana funkcja. Ponieważ jest dozwolone, aby program działający w trybie użytkownika tworzył fałszywe znaczniki czasu, nie ma wiele argumentów, dlaczegotouch
(lub jakiś inny program wiersza poleceń) nie powinien na to pozwalać na podstawie argumentu wiersza poleceń. Uczenie się C nie czyni cię bardziej uzasadnionym niż ktoś, kto piszesh
scenariusz ;-)age
plik. Byłby tocreation
znacznik czasu i nie ma takiego znacznika czasu dla plików w Uniksie.Odpowiedzi:
Jedną z zalet
touch
jest to, że może określać dowolne znaczniki czasu, aecho -n
zawsze będzie skutkować bieżącym czasem.Przykładem uzasadnionego użycia jest aktualizacja sygnatury czasowej pliku kodu źródłowego, aby podobny program
make
uznał plik źródłowy za nowszy niż skompilowany obiekt i go odbudował.Inne zastosowania to tworzenie plików, które działają wyłącznie na podstawie ich istnienia, np.
/etc/nologin
Co uniemożliwia logowanie, jeśli istnieje. Twierdziłbym również, żetouch myfile
jest to prostsza konstrukcja niżecho -n >> myfile
krótsza pisanie.źródło
echo -n
, widzę, że jest napisane: „nie wypisuj końcowego nowego wiersza”. Więc nie widzę, jak to może stworzyć pusty plik. Czy możesz to wyjaśnić?echo -n
wyświetli pusty ciąg i sam w sobie nic nie robi. Przekierowanie wyjścia za pomocą>>
powoduje dołączenie pustego wyjścia do pliku. Przekierowanie spowoduje utworzenie pliku, jeśli plik nie istnieje.echo -n
polecenia, które nic nie robi.echo -n
może wypisywać ciąg „-n” pod niektórymi powłokami. Jeśli naprawdę potrzebujesz polecenia, które nic nie robi:
lubtrue
jest lepszą opcją, ale>> myfile
samo w sobie jest również doskonale poprawnym sposobem tworzenia pliku, jeśli nie istnieje. Wszystko to oczywiście wspiera twoją odpowiedź, że powinieneś po prostu użyć „dotyku”.Podstawowe wywołanie systemowe (
utime
) jest ważne dla różnych narzędzi, takich jaktar
możliwość ustawiania znaczników czasu dla nowo skopiowanego (nie-tarowanego) pliku. Niektóre narzędzia do tworzenia kopii zapasowych mogą być również dostępne w celu zresetowania czasu ostatniego dostępu do plików, które skopiowały.Jednym z uzasadnionych zastosowań
touch
jest utworzenie pliku z określonym znacznikiem czasu. Taki plik „odniesienia” może być następnie używany przez takie poleceniafind
. Na przykład, aby znaleźć wszystkie pliki zmodyfikowane ostatnio niż 1 listopada 2013 r. (Tj. 2013/11/01) „źródło
201311010000
to oznacza 1 listopada 2013 r.? Czy istnieje narzędzie, które mi to powie? Innymi słowy, jak określić dane wejściowe do dotknięcia?20131101
można podzielić na2013-11-01
1 listopada 2013 r. Możesz następnie założyć, że0000
część wskazuje konkretną porę dnia, w tym przypadku 00 godzin, 00 minut. Lub możesz po prostu spojrzeć na stronę podręcznika użytkownikatouch
, która mówi dokładnie, jaki jest format (patrz-t
).Przez
touch
dowództwa podstawowym celem jest manipulowanie znaczniki czasu plików i tworzenia plików.Przykłady
1. tworzenie plików
UWAGA: Dane
total 0
wyjściowels -l
są prawidłowe. Ta implementacjals
pokazuje liczbę bloków używanych przez pliki na liście. Możesz się tego upewnić, dodając-s
przełącznik dols
. Spowoduje to wyświetlenie bloków używanych przez każdy plik. Tutaj dodałem 2 znaki do pliku 1 i pliku 2.Przykład
2. informacje o czasie / dacie pliku - polecenie stat
Możemy użyć
touch
do manipulowania różnymi znacznikami czasu w danym pliku.3. fragment strony podręcznika dotykowego
4. manipulowanie czasem dostępu
5. manipulować modyfikować czas
Być może zastanawiasz się nad czasem zmiany (ctime). Za pomocą których nie można manipulować
touch
. Śledzi to czas, w którym dowolny z metadanych został dotknięty w pliku. Zobacz pytania i odpowiedzi dotyczące U&L, aby uzyskać więcej informacji, zatytułowane: Co możesz zrobić z plikiem bez uruchamiania znacznika czasu „Zmień”? .źródło
ls -l
katalogu, w którym pliki mają rozmiar 0 i nic więcej jeszcze nie istnieje. Jak tylko podasz jeden z rozmiarów plików, suma pokaże się w / ilość bloków używanych przez pliki. Zobacz moje aktualizacje, jeśli nie masz pewności, dodałem przykład.Oprócz pozostałych dwóch bardzo dobrych odpowiedzi, które otrzymałeś, jeszcze jednym słowem jest użycie
na przykład do zastosowania w schematach tworzenia kopii zapasowych . Możesz nie chcieć aktualizować kopii zapasowej nowszą, ponieważ są one identyczne lub ponieważ zmiany są nieistotne w porównaniu z kosztem aktualizacji kopii zapasowej, powiedzmy, wolnej linii do zdalnego hosta. Aby to osiągnąć, masz prostą opcję oznaczenia pliku kopii zapasowej nowszym znacznikiem czasu, nie udając, ale oświadczając, że znacznik czasu ważności tego pliku jest teraz inny.
Wrażenie na temat wieku pliku jest obecnie fałszywe, ale jego znaczenie jest prawdziwe i uzasadnione.
źródło
Jednym z najczęstszych zastosowań
touch
jest - lub przynajmniej kiedyś - wyzwalanie odbudowy kodu.Zwykłe narzędzia do budowania -
make
i ich pochodne - starają się oszczędzać pracę, nie kompilując / przebudowując plików, chyba że jeden z plików, który je utworzył, zmienił się - na przykład, jeśli plik .o jest nowszy niż plik .c źródło, zwykle można bezpiecznie założyć, że źródło C nie zostało zmienione od czasu kompilacji w celu utworzenia tego pliku obiektowego.Ale są chwile, kiedy chcesz zmusić coś do odbudowy. Możesz dokonać niepotrzebnej modyfikacji jednego z jego plików źródłowych, ale ryzykuje to przypadkowym uszkodzeniem. Zamiast tego możesz po prostu
touch
plik, dzięki czemu będzie wyglądać na nowy bez ryzyka zmiany jego zawartości - i to wystarczy, aby przekonać,make
że nadszedł czas, aby odbudować wszystko, co zależy od tego pliku.Istnieją inne zastosowania, ale historycznie było to duże.
źródło
touch
jest tak źle, jak ręcznej zmiany. Aby spowodować przebudowę, sugeruję usunięcie plików wyjściowych.o
danego źródła.Pracowałem z co najmniej jednym frameworkiem internetowym (nie pamiętam, który), który w trybie programowania oglądał pliki kodu źródłowego pod kątem zmian i ponownie załadował aplikację, kiedy to się stało.
Oczywiście czasami chciałeś, aby przeładował się po zmianie czegoś, czego nie oglądał, w którym to przypadku
touch
załatwił główny plik konfiguracyjny.Tak więc w ogólnym przypadku, ilekroć chcesz rozpocząć proces wywołany zmianami w pliku, bez faktycznej zmiany pliku.
źródło
Uzasadnione użycie dotyku:
źródło
Jednym z zastosowań jest poprawienie znacznika czasu pliku, który został nieprawidłowo ustawiony.
Na przykład w większości przypadków skopiowanie pliku (i w pewien sposób można go przenieść) powoduje, że nowy plik ma znacznik czasu bieżącego czasu, a nie znacznik czasu oryginalnego pliku.
Zwykle nie jest to pożądane. Dotyk może to „naprawić”.
Innym zastosowaniem jest odzwierciedlenie modyfikacji pliku, która została cofnięta przez przywrócenie znacznika czasu pliku do stanu sprzed operacji „edytuj ... cofnij edycję”.
źródło
alias cp='cp --preserve=timestamps'
jest bardziej odpowiedni dla mnie na PC…Ważną różnicą w porównaniu z
things
podobnymiecho
(lub nawet lepszymi,> file
jak wspominają inni) jest to, że dotyk nie rozbije zawartości.> file
opróżni plik.touch
nie będzie. Zamiast myśleć o sztuczkach, aby uniknąć uszkodzenia zawartości, wystarczy dotknąć! I tak będzie mniej działał w jądrze, ponieważ będzie działał tylko z atrybutami pliku bez marnowania czasu na przygotowanie się do otwarcia, a następnie wykonanie zamknięcia.Dotyk może prawdopodobnie zmienić znacznik czasu, nawet jeśli plik jest obecnie objęty obowiązkową lub doradczą blokadą lub jest wyłączny. Hmmm, nigdy tego nie testowałem ani nie czytałem o tym ...
źródło
>>
dołączy zamiast nadpisywaniaOto jeden - używam programu o nazwie SageTV do nagrywania programów telewizyjnych - często są one nagrywane w formacie MPEG-2, który nie jest bardzo wydajnym kodekiem, nie jest też przyjazny dla iPada / iPhone'a. Więc przekonwertowałem pliki na pliki .mp4. Ale podczas odtwarzania plików SageTV oczekuje, że znacznik czasu pliku będzie miał miejsce w momencie rozpoczęcia programu telewizyjnego - jeśli nie, to zepsuło oś czasu programu, aby nie było łatwo FF ani REW. Dlatego używam dotyku, aby zresetować znacznik czasu pliku .mp4, aby był taki sam jak plik orignal.
Czy to jest legalne?
źródło
Często możesz mieć proces, który zmienia się z identyfikatora użytkownika, na przykład z katalogu głównego -> czegoś innego. Dotyk daje szansę na utworzenie pliku w miejscu, które może dotknąć tylko root, zanim aplikacja zacznie się logować do niego jako inny użytkownik.
źródło
W pracy mamy archiwum map cyfrowych sprzed ponad 15 lat. Te stare mapy są zapisywane w różnych formatach, takich jak PostScript, EMF, PRN, hpgl2, pdf itp., Których większość programów nie rozumie. Lub potrzebujesz kilkunastu różnych programów, aby zobaczyć je wszystkie.
Aby ułatwić wyszukiwanie i przeglądanie wszystkich tych różnych formatów, tworzymy wersje map JPEG, a następnie używamy dotyku, aby dopasować plik JPEG do znacznika czasu oryginalnego pliku źródłowego - często lata po jego utworzeniu.
Teraz możemy użyć jednego programu, takiego jak Picasa, aby zobaczyć całą bibliotekę i w prosty sposób zlokalizować określone zakresy dat. Bez dotyku musielibyśmy dodać metadane daty dla każdego obrazu, prawdopodobnie ręcznie, a następnie wyszukać te ciągi, szukając określonego zakresu dat.
źródło
Nie wykorzystałem go jeszcze do tego celu, ale mam skrypt, który odczytuje pliki i ich daty z katalogu i odczytuje je do użycia na stronie internetowej. Jeśli będę musiał edytować jeden, zmieni on datę. Rozważałam
touch
ing je zresetować ich kolejność.źródło
Niektóre skrypty inicjujące porównują znacznik czasu pliku konfiguracyjnego z własnym plikiem pid. Wynik decyduje, czy przeładować działającą usługę, czy nie.
Jeśli występuje sytuacja, w której nie chcesz zmieniać konfiguracji, ale chcesz wymusić ponowne załadowanie, dotknij tutaj.
źródło
Mam zadanie cron, które pobiera zmiany z bazy danych, które wystąpiły między ostatnim uruchomieniem zadania a bieżącym uruchomieniem. Tworzy plik XML zmian, które następnie są przetwarzane w innej bazie danych. Pobiera ostatni czas działania ze znacznika czasu w pliku wyjściowym XML. *
Jeśli cokolwiek pójdzie nie tak podczas przetwarzania pliku XML, mógłbym chcieć powtórzyć uruchomienie od oryginalnej daty, a nie od daty, o której mowa w sygnaturze czasowej nowego pliku XML.
Najprostszym sposobem na dokonanie tego, zamiast edytowania wywoływanych skryptów itp., Jest dotknięcie pliku XML i wymuszenie znacznika czasu na wymaganą datę.
Również jeśli zacznę od nowa (bez wcześniejszego pliku wyjściowego XML), mogę po prostu symulować jego istnienie za pomocą dotyku.
[*] Zanim ktoś to zauważy - zdaję sobie sprawę z tego, że czas rozpoczęcia zadania i zapis pliku XML pozostawia kilkuminutową przerwę, w której mogą wystąpić zmiany DB. Zadanie jest uruchamiane w czasie, gdy zmiany DB są bardzo mało prawdopodobne. To moja wymówka i trzymam się jej :-)
źródło