Mam katalog, w którym znajduje się wiele folderówktóre mają podfoldery ponownie, a następnie są jakieś pliki. Czy mogę napisać skrypt basha, który kopiuje wszystkie pliki z danego katalogu do jednego folderu? Aby nie musiałem poruszać się po pojedynczym folderze i kopiować zawartość do innego folderu.
Odpowiedzi:
1 dla odpowiedzi № 1W najwyższym katalogu, w którym chcesz skopiować pliki:
find . -type f -exec cp {} /some/new/location ;
Znajduje wszystkie normalne pliki, a następnie kopiuje je do /some/new/location
0 dla odpowiedzi nr 2
Możesz użyć find do wyświetlenia wszystkich plików w folderze:
find ./source -type f
a następnie użyj wyjścia jako argumentu dla cp, wyglądałoby to tak:
cp $(find ./source -type f) destination
Wystąpiłby problem, gdyby w oryginalnym drzewie katalogów znajdowały się pliki o sprzecznej nazwie. W takim przypadku cp odmówi skopiowania dodatkowych plików o tej samej nazwie z błędem takim jak:
cp: nie zastąpi właśnie utworzonego
destination/t22" with
./source/test/t2/t22 ”
Aby wykonać kopie plików o tej samej nazwie, możesz użyć opcji tworzenia kopii zapasowej, takiej jak ta:
cp --backup=numbered $(find ./source -type f) destination
Jeśli chcesz zobaczyć, co się dzieje, użyj opcji -v (verbose)
cp -v --backup=numbered $(find ./source -type f) destination