Tak więc możesz używać *symbolu wieloznacznego dla wszystkich plików, gdy używasz go cpw kontekście katalogu. Czy istnieje sposób na skopiowanie wszystkich plików oprócz xpliku?
Tak więc możesz używać *symbolu wieloznacznego dla wszystkich plików, gdy używasz go cpw kontekście katalogu. Czy istnieje sposób na skopiowanie wszystkich plików oprócz xpliku?
Odpowiedzi:
W bashmożesz użyć extglob:
$ shopt -s extglob # to enable extglob
$ cp !(b*) new_dir/
gdzie !(b*)wyklucz wszystkie b*pliki.
Możesz później wyłączyć za extglobpomocą
$ shopt -u extglob
findto jedyny sposób na tcsh:find . -maxdepth 1 ! -name "exclude*" -exec cp -t destination {} \+
Rsync radzi sobie z tym ładnie.
Przykład skopiuj wszystko: rsync -aP /folder1/* /folder/2
Przykład skopiuj wszystko z wyłączeniem: rsync -aP --exclude=x /folder1/* /folder2/
-aPPrzełącznik:
a: Podobne do cp -arekurencyjnego itp. P: Pokazuje postęp, miłą cechę rsync.
-rPzamiast, -aPjeśli chcesz się powtarzać. -asłuży do archiwizacji. Nie jestem pewien, czy to się zmieniło, czy po prostu inaczej na MacOS.
rsyncma opcję uczynienia go rekurencyjnym. Przykład: rsync --recursive -P --exclude=x /folder1/* /folder2/. (Testowane tylko na Ubuntu)
To nie jest funkcja cp, jest to funkcja twojej powłoki (rozwija się tak, *że oznacza wszystkie pliki bez kropek), więc odpowiedź zależy od używanej powłoki . Na przykład zshobsługuje tę składnię:
$ cp ^x /path/to/destination
Gdzie ^xoznacza „wszystkie pliki oprócz x”
Możesz także łączyć wzorce wyboru i usuwania zaznaczenia, np. Aby skopiować wszystkie pliki wav oprócz tych zawierających xyz, możesz użyć:
cp *.wav~*xyz*
bash?
Można to również zrobić w zwykłej starej (przenośnej / kompatybilnej) powłoce Bourne'a na wiele sposobów za pomocą standardowych narzędzi w znacznie mniej elegancki sposób niż przy użyciu zaawansowanego globowania powłoki lub poleceń z wbudowanymi opcjami wykluczania.
Jeśli nie ma zbyt wielu plików (i nie zawiera nazw, w tym spacji i / lub podziałów wierszy), może to być sposób:
cp `ls | egrep -v '^excludename$'` destdir/.
Oczywiście bashnarzędzia GNU są świetne i wydajne, ale wciąż nie zawsze są dostępne. Jeśli zamierzasz umieścić go w przenośnym skrypcie, poleciłbym findjak w komentarzu Rush.
Jeśli chcesz skopiować wszystko z folderu (łącznie z podfolderami) do określonego podkatalogu:
cp -R $(ls | grep -v '^subdir$') subdir/
Działa z sh, bash, zsh (przynajmniej).
cp -R * subdir/
cp(nie z bash/ sh), „ cp: cannot copy a directory, ‘subdir’, into itself, ‘subdir/subdir’”. Kopiowanie jest jednak prawidłowe. Niestety twój wariant zrywa z każdą nazwą pliku zawierającą spację lub interpunkcję wrażliwą na powłokę. Zobacz unix.stackexchange.com/q/128985/135943
extglob to chyba jak dotąd najlepszy sposób.
Innym sposobem jest użycie
cp $(ls --ignore=x) subdir/
$itp.) Nigdy nie analizuj wyniku ls. unix.stackexchange.com/q/128985/135943