Powodem jest to, że in bash
, *
nie obejmuje plików zaczynających się od kropki ( .
).
Możesz biegać
cp A/.* B
Będzie cię ostrzec, że nie kopiować .
lub ..
czy jakieś podkatalogi, ale to jest w porządku.
Lub, jeśli chcesz skopiować pliki kropkowe i normalne pliki, uruchom
cp A/.* A/* B
Możesz także biec
shopt -s dotglob
cp A/* B
które będą działać bash
, ale nie sh
.
A jeśli nie masz nic przeciwko kopiowaniu podkatalogów, jest to najłatwiejsze:
cp -R A/ B
Wskazówka: jeśli kiedykolwiek symbole wieloznaczne nie działają zgodnie z oczekiwaniami, spróbuj uruchomić je za pomocą echa, np
$ echo A/*
A/file1 A/file2
$ echo A/.*
A/. A/.. A/.hidden1 A/.hidden2
$ echo A/.* A/*
A/. A/.. A/.hidden1 A/.hidden2 A/file1 A/file2
$ shopt -s dotglob
$ echo A/*
A/file1 A/file2 A/.hidden1 A/.hidden2
-r
. Bez-r
tego po prostu pominie katalogi.-R
powinien również działać dobrze. Jeśli uważasz, że to źle, wyjaśnij dlaczego.Jeśli bash, możesz ustawić
dotglob
przed skopiowaniemLub język programowania
Jeśli nie chcesz ustawiać dotglob, po prostu
źródło
A
są ukryte. Po prostu chce to skopiować.To, czego szukasz, jest bardziej podobne do:
Spowoduje to dopasowanie wszystkich plików dot, ale nie „.” lub „..”. Większość powyższych rozwiązań jest w porządku, o ile nie pracujesz rekurencyjnie. Ale gdy tylko zechcesz zrobić coś takiego:
Bez pomijania „..” skopiujesz wszystko z katalogu nadrzędnego w dół, w tym pliki inne niż dotfile.
źródło
.a
lub.x
. Najkrótszy znaleziony przeze mnie wzór globowania, który pasuje do każdego pliku kropki oprócz.
i..
jest.[^.]*
.Właśnie próbowałem następujące i to działa po prostu znaleźć ...
źródło
A/.
iA/..
jako parametry docp
, co może być problematyczne w przypadku, gdy OP również musi skopiować katalogi (używająccp -r
)To nie
cp
jest wina , to bash: bash rozwija się*
we wszystkich nie ukrytych.
plikach (tzn. Nie zaczyna się od ).Bash będzie się rozwijał
.*
(tak jakA/.*
w twoim przypadku) ze wszystkimi plikami zaczynającymi się od.
, ale na szczęście zawiera także.
i..
(katalogi bieżący i nadrzędny), które prawdopodobnie będziesz chciał pominąć. (Zauważ, że inne powłoki, takie jak zsh, nie obejmowałyby ich, a IIRC również bash, po ustawieniu niektórych opcji).Łatwym rozwiązaniem może być usunięcie
.
i..
dopasowanie plików.*
w (bardzo) hackerski sposób:lub ten (prawdopodobnie czystszy: używa
find
do znalezienia plików do skopiowania):ale prawdopodobnie znajdziesz czystsze rozwiązania.
źródło
for loop
a następnie stworzyć dodatkowygrep
proces tylko po to, aby wykonać taką pracęcp A/.*
?cp
zignoruje „.” i katalogi „..”.Jeśli wszystkie zaczynają się od kropki, po prostu użyj
A/.*
:Mam nadzieję że to pomoże!
źródło
Możesz użyć tego skryptu
źródło
Kopiuj:
lista:
wyświetla listę plików bez malejących katalogów:
źródło
Musisz wykluczyć. i .. z listy plików przekazanej do cp!
To jest bezpieczne:
źródło
To jest stary wątek ... ale zawsze byłem w stanie skopiować wszystkie pliki. W tym pliki / foldery zaczynające się od „.”
Przykład skopiuje wszystkie pliki i foldery:
cp -aup /root/.* / backup / root /
źródło