Rekurencyjna Kopia konkretnych plików w Unix/Linux? [zamknięte]
Zamknięte. to pytanie jest off-topic . Obecnie nie przyjmuje odpowiedzi.
Chcesz poprawić to pytanie? Update the question so to on-topic dla przepełnienia stosu.
Zamknięte 8 lat temu .
Popraw to pytanieMuszę skopiować wszystkie *.jar
pliki z katalogu i jego podkatalogów. Jak mogę to zrobić w terminalu UNIX/Linux? Polecenie cp -r *.jar /destination_dir
nie działa.
7 answers
rsync
jest przydatny do lokalnego kopiowania plików, jak również między maszynami. To zrobi co chcesz:
rsync -avm --include='*.jar' -f 'hide,! */' . /destination_dir
Cała struktura katalogów z . jest kopiowany do /destination_dir, ale tylko do .pliki jar są kopiowane. Opcja-a zapewnia, że wszystkie uprawnienia i czasy na plikach są niezmienione. Opcja-m pomija puste katalogi. - v jest dla verbose output.
Na sucho Dodaj a-n, powie Ci, co zrobi, ale nie skopiuje niczego.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 23:20:14
Jeśli nie potrzebujesz struktury katalogów tylko plików jar, możesz użyć:
shopt -s globstar
cp **/*.jar destination_dir
Jeśli chcesz mieć strukturę katalogów, możesz zaznaczyć opcję cp
's --parents
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-30 23:30:52
Jeśli Twoje znalezisko ma przełącznik-exec i opcję-t:
find . -name "*.jar" -exec cp -t /destination_dir {} +
Jeśli nie znajdziesz " + " dla wywołania równoległego, możesz użyć ";", ale możesz pominąć -t
:
find . -name "*.jar" -exec cp {} /destination_dir ";"
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 20:08:57
cp --parents `find -name \*.jar` destination/
From man cp
:
--parents
use full source file name under DIRECTORY
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 19:16:17
tar -cf - `find . -name "*.jar" -print` | ( cd /destination_dir && tar xBf - )
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 19:04:23
Jeśli chcesz zachować tę samą hierarchię katalogów pod miejscem docelowym, możesz użyć
(cd SOURCE && find . -type f -name \*.jar -exec tar cf - {} +) \
| (cd DESTINATION && tar xf -)
Ten sposób działania, zamiast rozszerzać wyjście find
W back-tickach, ma tę zaletę, że jest w stanie obsłużyć dowolną liczbę plików.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 19:43:31
find . -name \*.jar | xargs cp -t /destination_dir
Zakładając, że nazwy plików jar nie zawierają spacji, a cp
ma opcję "- t". If cp
can ' t do "-t"
find . -name \*.jar | xargs -I FILE cp FILE /destination_dir
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-08 18:43:19