Chciałbym skopiować pliki z wieloma rozszerzeniami do jednego katalogu docelowego.
Na przykład mogę użyć następującego polecenia, aby skopiować wszystkie pliki .txt z katalogu roboczego do katalogu o nazwie destination
:
cp -v *.txt destination/
I mogę użyć następujących poleceń, aby skopiować wszystkie katalogi .png z katalogu roboczego do destination
:
cp -v *.png destination/
Ale wpisywanie ich jako osobnych poleceń jest czasochłonne (nawet przy użyciu historii poleceń). Więc, czy jest jakiś sposób, że mogę powiedzieć cp
, aby skopiować pliki z obu wzoru *.txt
lub wzoru *.png
do destination
? Idealnie, chciałbym być w stanie określić więcej niż dwa wzory - jak instruowanie cp
, aby skopiować wszystkie *.txt
lub *.png
czy *.jpg
pliki destination
, na przykład.
Jestem pewien, że wszystko to jest możliwe przy użyciu skryptu powłoki - używam bash
na przykład - ale czy jest jakiś sposób, aby to zrobić w prostszy sposób, tylko z konsoli? Czy mogę w jakiś sposób użyć rozszerzenia nawiasów klamrowych, aby to zrobić?
Wiem, że możliwe jest skopiowanie wszystkich plików w katalogu roboczym oprócz tych pasujących do określonych określonych wzorców , ale ponieważ mój katalog roboczy zawiera znacznie więcej rozszerzeń plików, których nie chcę kopiować, niż te , które robię , byłoby to uciążliwe.
Czy masz jakieś przemyślenia na ten temat?
cp -v *.txt *.png destination/
?Odpowiedzi:
Rozszerzenie klamry wykona zadanie.
man bash
i wyszukajBrace Expansion
.EDYTOWAĆ:
Zgodnie z żądaniem PO w powyższym poleceniu brakowało opcji pełnej:
źródło
cp data/images/*.{jpg,jpeg,png,mp4} destination/
amp4
plik nie istnieje, pojawia sięNo such file or directory
błąd, który psuje skrypt. Czy mogę sprawić, by wiele rozszerzeń z łatwością obsługiwało brakujące formaty?To działa!
źródło