twoje komentarze wspominają o dodatkowych ograniczeniach: polecenie nie powinno przenosić ukrytych plików z bieżącego katalogu roboczego. jeśli jest to poprawne, czy możesz edytować swoje pytanie, aby o tym wspomnieć? powiedzenie „przenieś tylko pliki” powoduje, że myślimy „przenieś wszystkie pliki”, w tym pliki ukryte.
Wow, ktoś, kto umie używać, znajdź. Dla kompletności powinieneś użyć -name [^.] * W find, tj. --- find. -maxdepth 1 -typ f -name [^.] * -exec mv {} ścieżka \;
Chris
NIE KOPIUJ-WKLEJ TO DO SWOJEJ ŁUSKI. Średnik spowoduje jego natychmiastowe wykonanie. :)
Sherwood Callaway,
@SherwoodCallaway Średnik ma oznaczać koniec-exec
dstonek,
4
Jestem typem „używaj młotka do wszystkiego”, więc używam programów Bourne Shell do rzeczy, które inni używają programów zewnętrznych do ...
for file in * .*
do
test -f "$file" && mv "$file" "$HOME"/
done
Niektórzy ludzie lubią robić rzeczy tak mało pisania, jak to możliwe, ale jestem dość szybką maszynistką i mam takie rzeczy wbudowane w mój mózg, więc nie jest to zbyt uciążliwe, aby to zrobić zamiast szukać dokładnego argumenty do znalezienia i wykonania i tak dalej.
dzięki za to spróbuję. ale nadal potrzebuję innej odpowiedzi, ponieważ jest to projekt, który wykonuję na kursie linux. dzięki bardzo
1
To jest odpowiedź na twoje pytanie. mv nie rozumie plików, katalogów, fifos ani innych plików specjalnych. mv rozumie tylko wpisy katalogu i i-węzły, a jeśli chodzi o to, są one takie same, niezależnie od typu pliku. Aby mv mógł przenosić tylko określony typ pliku, potrzebujesz czegoś takiego jak test lub znajdź, który faktycznie może spojrzeć na i-węzeł, aby zobaczyć, co to jest plik. Innymi słowy, otrzymujesz podchwytliwe pytanie, jeśli zostaniesz poproszony o zrobienie tego tylko z mv.
Chris
1
I mówię, że mv rozumie i-węzły tylko dlatego, że jest w stanie przenieść plik z jednego systemu plików do innego, co technicznie jest cp, a następnie rm, a nie mv (co jest tak naprawdę tylko ln, a następnie rm). Spójrz na twarde linki i wpisy w katalogu.
Chris
2
shorty: To dobra odpowiedź, musisz użyć czegoś oprócz polecenia mv (przynajmniej powłoki). Jest to mniej więcej podstawowe bez programowania.
Kyle Brandt
3
@Mereghost jest bardzo blisko. Oto, co mogę przenieść wszystkie pliki (w tym pliki ukryte), ale nie katalogi:
tak, to działało, ale nie w 100% skopiowało wszystkie pliki z katalogów i podkatalogów do ~ / location. Potrzebuję tylko czegoś bardzo podstawowego, co kopiuje pliki bez ukrytych plików z katalogu Jestem w innym katalogu. Otóż to. i tak dziękuję za radę
Jest to niemożliwe przy maxdepth jako 1.
John T
naprawione, aby nie kopiowało ukrytych plików.
John T
1
Składnia przy szukaniu to znajdź potem katalog, a następnie opis operacji i rzeczy do dopasowania. Zazwyczaj nigdy nie używa się symboli wieloznacznych, takich jak find *, bez ochrony przed globowaniem (tj. Find / path / to / directory -name goo * -type f.
Chris,
1
Funkcja Znajdź działa poprawnie tylko wtedy, gdy podasz jej jedną ścieżkę do sprawdzenia. W twoim przykładzie, na przykład, jeśli jakieś pliki zaczynają się od - find, niespodziewanie wybuchnie. Zawsze lepiej jest mieć tylko jeden program, który odczytuje wpisy w katalogu, aw swoim przykładzie używasz dwóch różnych programów (find i powłoki).
Nie powiedzie się to dla plików zawierających spacje w nazwie. Dane wyjściowe poleceń drukujących nazwy plików nigdy nie powinny być analizowane, chyba że można zagwarantować, że są one właściwie rozdzielane. Zobacz, dlaczego nie powinieneś analizować danych wyjściowych ls (1) dla głównego pomysłu. Korzystanie find„s -execopcja jest najlepszym sposobem na uniknięcie tego problemu.
Odpowiedzi:
Możesz spróbować
źródło
-exec
Jestem typem „używaj młotka do wszystkiego”, więc używam programów Bourne Shell do rzeczy, które inni używają programów zewnętrznych do ...
Niektórzy ludzie lubią robić rzeczy tak mało pisania, jak to możliwe, ale jestem dość szybką maszynistką i mam takie rzeczy wbudowane w mój mózg, więc nie jest to zbyt uciążliwe, aby to zrobić zamiast szukać dokładnego argumenty do znalezienia i wykonania i tak dalej.
YMMV, chociaż ...
źródło
@Mereghost jest bardzo blisko. Oto, co mogę przenieść wszystkie pliki (w tym pliki ukryte), ale nie katalogi:
.
Po find zakłada, że bieżący katalog jest źródłem plików, które chcesz przenieść. Jeśli nie, polecenie można zmienić w następujący sposób:Jeśli chcesz przenieść tylko zwykłe pliki, a nie pliki ukryte:
Jeśli chcesz przenieść tylko pliki ukryte, a nie zwykłe:
źródło
Jeśli nie masz folderów z nazwą z kropką, możesz przenieść je wszystkie po prostu:
mv . ~ / folder docelowy
(Moje założenie jest takie, że wszystkie twoje pliki są czymś. Coś (w moim przypadku zazwyczaj są).
ALE dzięki innym odpowiedziom - bardzo pomocne. dzięki
źródło
możesz użyć find
źródło
mv `find ./sourcedir/* -type f` ./destdir
źródło
find
„s-exec
opcja jest najlepszym sposobem na uniknięcie tego problemu.