Linux cp-parameters. Bestanden en mappen kopiëren op Unix-systemen. Standaard GNU-opties

Bijgewerkt: 29-12-2017 door Computerhoop

Over cp

De cp commando is maakt kopieën van bestanden en mappen.

Syntaxis

cp [optie]... [-T] bron bestemming cp [optie]... bron... map cp [optie]... -T map bron... cp-help cp --versie

Opties

-A,
--archief
Hetzelfde als -dR --behoud=ALLE. Probeer bij het kopiëren zoveel mogelijk van de oorspronkelijke bestandsstructuur, kenmerken en bijbehorende metagegevens te behouden. Deze metagegevens bevatten beveiligingscontextgegevens als je SELinux draait.
--alleen attributen Kopieer de bestandsgegevens niet, maar maak gewoon een bestand met dezelfde kenmerken. Als het doelbestand al bestaat, wijzig dan de inhoud ervan niet. U kunt precies bepalen welke attributen worden gekopieerd met de --beschermen optie.
--back-up[= controle] Maak een back-up van elk bestaand doelbestand dat anders zou worden overschreven of verwijderd. De controle parameter specificeert welke versiebeheermethode moet worden gebruikt; zie voor details.

Als speciaal geval geldt cp --force --backup zal een back-up van maken bron wanneer bron En bestem zijn hetzelfde, reguliere bestand.

-B Leuk vinden --back-up, maar accepteert geen a controle argument; altijd wordt de standaard besturingsmethode gebruikt.
--kopie-inhoud Wanneer u recursief werkt, kopieert u de inhoud van speciale bestanden, zoals FIFO's en apparaten die u in /ontwikkelaar. Normaal gesproken wilt u deze optie niet gebruiken, omdat dit ongewenste gevolgen kan hebben, zoals voor altijd vastlopen of het vullen van uw hele schijf. Deze optie is echter beschikbaar voor speciale, deskundige gebruiksscenario's.
-D Kopieer symbolische koppelingen zelf, in plaats van de bestanden waarnaar ze verwijzen, en bewaar harde koppelingen tussen bronbestanden in de kopieën. Hetzelfde als " --no-dereference --preserve=links".
-F,
--kracht
Als een bestaand doelbestand niet kan worden geopend, verwijdert u het en probeert u het opnieuw. Deze optie heeft geen effect als de -N/--geen-klopper optie wordt gebruikt. Het geldt echter onafhankelijk van -i/--interactieve; geen van beide opties heft het effect van de andere op.
-i,
--interactieve
Vragen vóór overschrijven (overschrijft een vorige -N optie).
-H Volg de op de opdrachtregel opgegeven symlinks, maar behoud de ontdekte links.

De map die het koppelpunt zelf vertegenwoordigt, wordt gekopieerd, maar niet doorlopen.

Als -v is opgegeven, ziet u precies welke bestanden zijn overgeslagen.

--hulp Geef een helpbericht weer en sluit af.
--versie Voer versie-informatie uit en sluit af.

Standaard schaars bron bestanden worden gedetecteerd door een ruwe heuristiek en de bijbehorende bestemming bestand wordt ook schaars gemaakt. Dat is het gedrag waar door wordt geselecteerd --sparse=automatisch. Specificeer --sparse=altijd om een ​​schaars te creëren bestemming bestand wanneer dan ook bron bestand bevat een voldoende lange reeks van nul bytes. Gebruik --sparse=nooit om het aanmaken van schaarse bestanden te voorkomen.

Wanneer --reflink[= altijd] is gespecificeerd, cp voert een lichtgewicht kopie uit, waarbij de datablokken alleen worden gekopieerd als ze worden gewijzigd. Als dit niet mogelijk is, mislukt het kopiëren; of, als --reflink=automatisch is gespecificeerd, cp valt terug op een standaardkopieerbewerking.

Versiebeheer

Bij gebruik -B/--back-up, het back-upachtervoegsel is " ~ ", tenzij ingesteld met --achtervoegsel of SIMPLE_BACKUP_SUFFIX. De versiebeheermethode kan worden geselecteerd via de --back-up=controle optie of via de VERSIE_CONTROL omgevingsvariabele. De mogelijke waarden van controle of VERSIE_CONTROL Zijn:

geen, uit Maak nooit back-ups (ook niet als --back-up wordt gegeven).
genummerd, T Maak genummerde back-ups.
bestaande, nul Genummerd als er genummerde back-ups bestaan, eenvoudig anders.
eenvoudig, nooit Maak altijd eenvoudige back-ups.

Als speciaal geval geldt cp maakt een back-up van bron wanneer de kracht En back-up opties worden gegeven en bron En bestemming zijn dezelfde naam voor een bestaand, normaal bestand.

Voorbeelden

Stel dat u een bestand heeft met de naam afbeelding.jpg in uw werkmap en u wilt er een kopie van maken, genaamd afbeelding-02.jpg. Je zou de opdracht uitvoeren:

Cp afbeelding.jpg afbeelding-02.jpg

En het bestand wordt gekopieerd. Hier, afbeelding.jpg is de bron van de kopieerbewerking, en afbeelding-02.jpg is de bestemming. Beide bestanden bestaan ​​nu in uw werkmap.

De bron- en doelbestanden kunnen zich ook in verschillende mappen bevinden. Bijvoorbeeld,

Cp /home/chuck/pictures/picture.jpg /home/chuck/backup/picture.jpg

Zal een kopie van het bestand maken /home/chuck/pictures/picture.jpg in de map /home/chuck/back-up. Het doelbestand krijgt ook een naam afbeelding.jpg.

Als u de gebruiker bent klauw, kunt u uw thuismap inkorten (" /home/chuck") met behulp van een tilde (" ~ "). Bijvoorbeeld,

Cp ~/pictures/picture.jpg ~/backup/picture.jpg

Functioneert hetzelfde als het bovenstaande commando wanneer het wordt uitgevoerd door klauw.

Meerdere bestanden naar een directory kopiëren

Of misschien wilt u kopiëren meerdere bestanden naar een andere map. Om dit te bereiken, kunt u meerdere bestanden als bron opgeven, en een mapnaam als bestemming. Stel dat u de gebruiker bent Sally, en je hebt een aantal bestanden in de map /home/sally/foto's/ genoemd foto-01.jpg, afbeelding-02.jpg enz. en je wilt ze naar de map kopiëren /home/sally/foto-back-up/. Dit commando zal het lukken:

Cp ~/pictures/picture-*.jpg ~/picture-backup cp -i oudbestand nieuwbestand

Als nieuwbestand al bestaat, wordt u gevraagd:

Cp: ​​'nieuwbestand' overschrijven?

Als je typt j(of Ja, Y, JA, of een andere combinatie van hoofdletters en kleine letters hiervan), dan nieuwbestand wordt overschreven met een kopie van origbestand. Als u iets anders typt, wordt de bewerking afgebroken.

Kopieer een bestand naar een andere map

cp origbestand /map/submap

origbestand. De kopie bevindt zich in de directory /map/submap en zal worden genoemd origbestand.

Cp origbestand /map/submap/.

Hetzelfde als het bovenstaande commando. De schuine streep ( /. ) is geïmpliceerd in de bovenstaande vorm van de opdracht. (De punt is een speciaal bestand in elke Linux-map, wat 'deze map' betekent.)

Kopieer een bestand naar een andere map en geef het een nieuwe naam

cp origbestand /map/submap/nieuwbestand

Maakt een kopie van het bestand in de werkmap met de naam origbestand. De kopie krijgt een naam nieuwbestand en bevindt zich in de directory /map/submap.

Kopieer meerdere bestanden naar een andere map, met behulp van een jokerteken

cp-bestand* /map/submap

bestand in de map /map/submap. Het sterretje (" * ") is een jokerteken: een speciaal teken dat zich uitbreidt zodat het overeenkomt met andere tekens. Het sterretje-jokerteken komt met name overeen met nul of meer niet-witruimtetekens. Met deze opdracht worden bijvoorbeeld alle bestanden met de naam gekopieerd bestand, bestand001, bestand.txt, bestandone.jpg, bestand-archief.zip enz.

Cp-bestand*.jpg /map/submap

Kopieer elk bestand in de werkmap waarvan de naam begint met bestand, en eindigt met de bestandsextensie .jpg. Het zou bijvoorbeeld kopieën maken van alle genoemde bestanden bestand, bestand001.jpg, bestand002.jpg, of bestand-nieuw.jpg enz. De kopieën worden in de map geplaatst /map/submap.

Kopieer een volledige directorystructuur naar een andere locatie

cp -R /een/twee /drie/vier

Kopieer de map twee(bevindt zich in de map /een), en alles twee bevat, naar de doelmap /drie/vier. Het resultaat wordt gebeld /drie/vier/twee. De map /drie moet al bestaan ​​om de opdracht te laten slagen. Als de map vier bestaat nog niet in de map /drie, het wordt aangemaakt.

Cp-bestand1.txt nieuwe map

Kopieert de bestand1.txt in de werkmap naar de nieuwedir submap.

Cp /home/public_html/mijnlog.txt /home/public_html/backup/mijnlog.bak

Kopieert het bestand mijnlog.txt in de public_html map in de public_html/back-up map als mijnlog.bak.

Cp -u *.txt nieuwe map

Kopieer alle bestanden die eindigen op .txt in de nieuwedir map, maar alleen als de bestanden nog niet in de nieuwe map bestaan, of als de bestanden die worden gekopieerd nieuwer zijn.

Cp -R /home/hoop/bestanden/* /home/hoop/back-up

Kopieert recursief alle bestanden, mappen en submappen in het /home/hoop/bestanden map in de /home/hoop/back-up map. Als de map back-up bestaat niet in de map /huis/hoop, het wordt aangemaakt.

cp --back-up origbestand nieuw bestand

Als nieuwbestand nieuwbestand origbestand. Standaard wordt de back-up van nieuwbestand zal genoemd worden nieuwbestand~.

cp --backup=genummerd origbestand nieuwbestand

Als nieuwbestand al bestaat, maak dan een back-up van het bestaande nieuwbestand voordat u het overschrijft met een kopie van origbestand. De back-up van nieuwbestand zal genoemd worden nieuwbestand.~1~ als er geen andere back-up bestaat, of nieuwbestand.~2~ als nieuwbestand.~1~ bestaat, enz.

Gerelateerde opdrachten

dd— Kopieer en converteer de codering van bestanden.
ln— Maak een link, of een symbolische link, naar een bestand of directory.
mv— Verplaats bestanden en mappen van de ene locatie naar de andere en wijzig ze optioneel.

Frequente operaties in bestandsstructuur maken bestanden en mappen aan, kopiëren, verplaatsen, hernoemen en verwijderen. Uiteraard voor dergelijke acties in commandoshell Linux moet speciale commando's bieden.

Bestanden en mappen kopiëren

In Bash is het commando dat wordt gebruikt om bestanden te kopiëren cp(van "kopie"), waarvoor gewoonlijk twee argumenten nodig zijn:

    adres met de naam van het bronbestand,

    een nieuw adres met een naam of eenvoudigweg het adres van de directory waar de kopie is geplaatst.

Het adres kan absoluut of relatief zijn. Als bestandsbewerkingen in de huidige map worden uitgevoerd, heeft het geen zin om het adres op te geven. Alleen de naam van het originele bestand en de naam van de kopie worden geschreven. Omdat er geen bestanden kunnen zijn met dezelfde namen en adressen, moet de naam van de kopie anders zijn dan de naam van het originele bestand.

Laten we naar voorbeelden kijken.

cp leesmij leesmij2

IN in dit geval er wordt een kopie van het leesmij-bestand gemaakt en deze blijft in dezelfde map staan ​​onder de naam readme2.

cp leesmij Desktop/

Het Leesmij-bestand wordt gekopieerd naar de map Desktop. Hier is de huidige map de bovenliggende Desktop-map. De namen van de kopie en het originele bestand komen overeen, maar de volledige adressen niet.

cp / home/ irina/ tux.png / mnt/ D/ pingvin.png

Hierbij wordt een bestand van de ene map naar de andere gekopieerd, worden absolute adressen gebruikt en wordt de naam van de kopie gewijzigd.

Als u er meerdere wilt kopiëren verschillende bestanden in dezelfde map, waarna na het cd-commando eerst alle originele bestanden worden vermeld en de map waarin de kopieën worden geplaatst als laatste wordt aangegeven. Het is duidelijk dat bij een dergelijke groepsactie de bestandsnamen niet kunnen worden gewijzigd.

Om een ​​map met de volledige inhoud ervan te kopiëren, moet u de optie -r van het cp-commando gebruiken:

cp -r ./ letters ./ oude letters

Verplaatsen en hernoemen

In bash- Linux-shell Hetzelfde commando wordt gebruikt om te verplaatsen en te hernoemen – mv(van "verplaatsen" - ​​naar bewegen). Hernoemen kan gezien worden als een speciaal geval van verhuizen, omdat het in essentie verandert volledig adres bestand, wat hetzelfde is als het verplaatsen ervan, zelfs als het bestand in dezelfde map blijft.

Net als in het geval van cp moet je voor mv een aantal argumenten opgeven. De keuze tussen verplaatsen en hernoemen hangt af van wat de argumenten zijn. Wanneer het bestand wordt verplaatst, verandert het adres. Als er dus verschillende adressen zijn opgegeven in het eerste en tweede argument, zal de verplaatsing plaatsvinden. Als de adressen hetzelfde zijn, maar alleen de namen verschillen, vindt hernoeming plaats. Bovendien kan verhuizen gecombineerd worden met hernoemen.

In het geval van een verplaatsing zonder hernoemen specificeert het tweede argument alleen de doelmap.

mv document.txt Werk

mv document.txt Werk/doc23.txt

Hier wordt in het eerste geval het bestand document.txt verplaatst naar de map Werk. In het tweede geval wordt het bestand tegelijkertijd verplaatst en hernoemd: het bestand document.txt wordt verplaatst naar de map Werk en krijgt een nieuwe naam doc23.txt.

Wanneer u de opdracht mv gebruikt om de naam te wijzigen, is het tweede argument de nieuwe naam:

mv order.txt orderNieuw.txt

mv Werk/lijst.odt Werk/namen.odt

Mappen worden op dezelfde manier verplaatst en hernoemd als bestanden. Het batchgewijs verplaatsen van bestanden werkt hetzelfde als met het cp-commando.

Bestanden en mappen maken

Met de opdracht worden nieuwe mappen aangemaakt mkdir. Als u bijvoorbeeld een werkmap in de huidige map wilt maken, moet u de volgende opdracht uitvoeren:

mkdir Werk
of
mkdir./Werk

Er zijn veel manieren om bestanden te maken, meestal worden ze door een bepaald programma gemaakt. Als u toch een leeg bestand moet aanmaken, kunt u dit doen met het touch-programma. De naam van het aan te maken bestand wordt als argument doorgegeven. Een andere manier is. Voorbeeld:

cal > ./ Werk/ Januari

Hier geeft het cal-programma de kalender voor de huidige maand weer, en aangezien er een uitvoeromleidingsteken is, wordt de uitvoer van de opdracht naar het januaribestand in de map Werk geschreven.

In voorgaande paragrafen hebben we al enkele commando's genoemd voor het werken met bestanden en mappen: pwd, cd, ls, ln, chmod. In deze sectie zullen we (heel kort) kijken naar enkele veelgebruikte opdrachten.

4.6.1. Teams gekauwd En chgrp

Deze opdrachten worden gebruikt om de eigenaar van een bestand en de groep van een bestand te wijzigen. Alleen de superuser kan de eigenaar wijzigen; de groep kan worden gewijzigd door de bestandseigenaar zelf of door de superuser. Om het recht te hebben om een ​​groep te wijzigen, moet de eigenaar bovendien lid zijn van de groep waaraan hij rechten wil geven dit bestand. Het formaat van deze twee opdrachten is vergelijkbaar:

# chown vasja bestandsnaam

# chgrp gebruikersgrp bestandsnaam

4.6.2. Team mkdir

Team mkdir Hiermee kunt u een submap maken in de huidige map. Als argument moet dit commando de naam krijgen van de map die moet worden aangemaakt. In de nieuw aangemaakte directory worden automatisch twee vermeldingen aangemaakt: . (link naar deze catalogus) en .. (link naar bovenliggende map). Om een ​​submap aan te maken, moet u schrijftoegang hebben tot de huidige map. U kunt een submap niet in de huidige map maken, maar in een andere map, maar dan moet u het pad opgeven naar de map die wordt gemaakt:

$ mkdir /home/kos/book/glava5/part1

Team mkdir kan worden gebruikt met de volgende opties:

    M-modus— stelt de toegangsmodus voor de nieuwe directory in (bijvoorbeeld -m 755) ;

    P— maak de gespecificeerde tussenliggende mappen (als ze niet bestaan).

4.6.3. Team kat

Team kat vaak gebruikt om bestanden te maken (hoewel je ook de opdracht aanraken). Op bevel kat De inhoud van het opgegeven bestand (of meerdere bestanden, als hun namen opeenvolgend zijn opgegeven als opdrachtargumenten) worden weergegeven in de standaarduitvoer (dat wil zeggen op het scherm). Als de opdrachtuitvoer kat omleiden naar een bestand, kunt u een kopie van een bestand verkrijgen:

$ cat-bestand1 > bestand2

Eigenlijk het oorspronkelijke doel van het team kat het was precies bedoeld om de uitvoer om te leiden, aangezien deze opdracht is gemaakt voor aaneenschakeling, dat wil zeggen het combineren van verschillende bestanden in één:

$ cat file1 file2 ... fileN > nieuw bestand

Het zijn de invoer- en uitvoeromleidingsmogelijkheden van deze opdracht die worden gebruikt om nieuwe bestanden te maken. Om dit te doen, moet het commando worden ingevoerd kat stuur de gegevens van standaardinvoer (dat wil zeggen het toetsenbord) en de uitvoer van de opdracht naar een nieuw bestand:

$ cat > nieuwbestand

Zodra je alles hebt getypt wat je wilt, druk je op de toetsencombinatie< Ctrl>+of< Ctrl>+, en alles wat u hebt ingevoerd, wordt geschreven nieuwbestand. Uiteraard worden op deze manier meestal korte tekstbestanden gemaakt.

4.6.4. Team cp

Hoewel de opdracht soms wordt gebruikt om bestanden te kopiëren kat, maar in Linux is hier een doel voor speciaal elftal cp. Het kan in twee vormen worden gebruikt:

$cp bronbestemming

$ cp bron_map nieuwe_map

In het eerste geval wordt het bronbestand of de bronmap respectievelijk gekopieerd naar het doelbestand of de doelmap, en in het tweede geval worden de bestanden in de map source_directory gekopieerd naar de map new_directory. Om te kopiëren moet u leesrechten hebben voor de bestanden die u kopieert en schrijfrechten voor de map waarnaar u kopieert.

Als een bestaand bestand als doel wordt opgegeven, wordt de inhoud ervan overschreven, dus wees voorzichtig bij het kopiëren. U kunt de opdracht echter gebruiken cp met de optie -i, wordt er om bevestiging gevraagd voordat een bestaand bestand wordt overschreven (ik raad u ten zeerste aan deze optie altijd te gebruiken!).

Het team cp Er zijn verschillende andere nuttige opties (Tabel 4.3).

Tabel 4.3. Basisopties voor de opdracht cd.

Optie

Betekenis

Bespaart tijd voor het wijzigen van bestanden en maximaal mogelijke machtigingen. Zonder deze optie krijgt het nieuwe bestand de machtigingen toegewezen die overeenkomen met de machtigingen van de gebruiker die de opdracht heeft gestart

R of -R

Als de bron een map is, worden zowel deze map als alle submappen die daarin zijn opgenomen gekopieerd, dat wil zeggen dat de oorspronkelijke vorm van de mappenstructuur behouden blijft.

Als u deze optie instelt, blijven symbolische links links (anders wordt in plaats van de link het bestand waarnaar de link wordt gegeven gekopieerd)

Overschrijf bestanden tijdens het kopiëren (als ze al bestaan) zonder extra waarschuwingen

4.6.5. Team mv

Als u een bestand van de ene map naar de andere wilt verplaatsen in plaats van het te kopiëren, kunt u de opdracht gebruiken mv. De syntaxis van deze opdracht is vergelijkbaar met de syntaxis van de opdracht cp. Bovendien kopieert het eerst het bestand (of de map) en verwijdert pas daarna het originele bestand (de map). En de opties zijn dezelfde als die cp.

Team mv kan niet alleen worden gebruikt om bestanden en mappen te verplaatsen, maar ook om ze te hernoemen (dat wil zeggen, ze binnen dezelfde map te verplaatsen). Om dit te doen, hoeft u alleen maar de oude en nieuwe bestandsnamen als argumenten op te geven:

$mv oudenaam nieuwenaam

Maar houd er rekening mee dat het team mv staat niet toe dat u meerdere bestanden tegelijk hernoemt (met behulp van een naamsjabloon), dus de opdracht mv *.xxx *.jjj zal niet werken.

Bij gebruik van de opdracht mv, maar ook bij gebruik cp, vergeet niet de optie -i te gebruiken om een ​​waarschuwing te krijgen wanneer het bestand wordt overschreven.

4.6.6. Teams rm En rmdir

Gebruik de commando's om onnodige bestanden en mappen in Linux te verwijderen rm(verwijdert bestanden) en rmdir(verwijdert een lege map). Om deze opdrachten te kunnen gebruiken, moet u schrijftoegang hebben tot de map waarin de te verwijderen bestanden of mappen zich bevinden. Er is echter geen toestemming vereist om de bestanden zelf te wijzigen. Als u een extra verzoek wilt ontvangen om de bewerking te bevestigen voordat u een bestand verwijdert, gebruikt u de optie -i.

Als u de opdracht probeert te gebruiken rm(zonder opties) om een ​​map te verwijderen, wordt een bericht weergegeven dat dit een map is, en de verwijdering zal niet plaatsvinden. Om een ​​map te verwijderen, moet u alle bestanden daarin verwijderen en vervolgens de map zelf verwijderen met behulp van de opdracht rmdir. U kunt echter ook een niet-lege map met al zijn submappen en bestanden verwijderen als u de opdracht gebruikt rm met de optie -r.

Als je het commando geeft rm* en verwijder vervolgens alle bestanden in de huidige map. Submappen worden niet verwijderd. Om zowel bestanden als submappen van de huidige map te verwijderen, moet u ook de optie gebruiken -R. Onthoud echter altijd dat Linux geen opdracht heeft om bestanden te herstellen nadat ze zijn verwijderd (zelfs als je jezelf betrapt nadat je per ongeluk een bestand of map hebt verwijderd)!

Denk dus twee keer na voordat u iets verwijdert en verwaarloos de optie niet -i.

4.6.7. Teams meer En minder

Team kat Hiermee kunt u de inhoud van elk bestand weergeven in standaarduitvoer (op het scherm), maar het wordt zeer zelden voor deze doeleinden gebruikt, behalve voor het uitvoeren van zeer kleine bestanden. Feit is dat de inhoud van een groot bestand onmiddellijk op het scherm flitst en dat de gebruiker alleen de laatste regels van het bestand ziet. Dat is waarom kat voornamelijk gebruikt voor het beoogde doel - om bestanden samen te voegen en om de inhoud van bestanden te bekijken (uiteraard tekst). Er worden opdrachten gebruikt meer En minder(of teksteditors).

Filteropdracht meer geeft de inhoud van het bestand op het scherm weer in afzonderlijke pagina's, precies zo groot als het hele scherm. Om de volgende pagina te zien, moet u op de spatiebalk drukken. Toetsaanslag< Enter>resulteert in een offset van één lijn. Naast de spatiebalk en< Enter>In de pauzemodus fungeren enkele andere toetsen als bedieningstoetsen (bijvoorbeeld de brengt u één scherm terug), maar we zullen hier geen volledige lijst ervan geven, evenals een lijst met opdrachtopties. Om te beginnen hoeft u alleen maar te onthouden dat u de weergavemodus kunt verlaten met de sleutel< Q>, want als je dit niet weet, zul je lang en vervelend op de spatiebalk moeten drukken totdat je aan het einde van het lange bestand komt. Over alle opdrachtopties meer lees je in de online handleiding man of info.

Nutsvoorziening minder, ontwikkeld als onderdeel van het GNU-project, bevat alle functies en uitvoerbesturingsopdrachten die in het programma te vinden zijn meer en met enkele andere kunt u bijvoorbeeld de cursortoetsen (<Стрелка вверх>, <Стрелка вниз>, , ) om door de tekst te bladeren. Bedenk dat we hier al over spraken toen we naar de interactieve tooltipman keken.

Teams meer En minder kunt u zoeken naar een subtekenreeks in het bestand dat wordt bekeken, en de opdracht minder Hiermee kunt u zowel vooruit als achteruit zoeken. Om een ​​zoekopdracht naar een reeks tekens te organiseren, moet string worden getypt in de opdrachtregel van het programma onderaan het scherm (waar de dubbele punt staat) /string. Als de zoekreeks wordt gevonden, wordt het bijbehorende stuk tekst weergegeven, waarbij de gevonden reeks helemaal bovenaan het scherm staat.

4.6.8. Team vinden en jokertekens voor bestandsnamen

Een ander veelgebruikt commando voor het werken met bestanden in Linux is het commando om het gewenste bestand te vinden vinden. Team vinden kan naar bestanden zoeken op naam, grootte, aanmaak- of wijzigingsdatum en enkele andere criteria.

Algemene opdrachtsyntaxis vinden heeft de volgende vorm:

zoek [directory_list] zoekcriteria

De parameter "lijst met mappen" bepaalt waar het vereiste bestand moet worden gezocht. De eenvoudigste manier is om de hoofdmap / in te stellen als de initiële zoekmap. In dit geval kan het zoeken echter erg lang duren, omdat de hele mapstructuur wordt doorzocht, inclusief aangekoppelde bestandssystemen (inclusief netwerksystemen, als elk). U kunt het zoekvolume verkleinen door, in plaats van één hoofdmap, een lijst met meerdere mappen op te geven (uiteraard de mappen waarin het gezochte bestand zich kan bevinden):

$ find /usr/share/doc /usr/doc /usr/locale/doc -naam instr.txt

Het begin van de “zoekcriteria”, die bepalen waar het programma precies naar moet zoeken vinden, wordt rekening gehouden met het eerste argument dat begint met "-", "(", ")"", "," of "!". Alle argumenten die aan "zoekcriteria" voorafgaan, worden behandeld als de namen van de mappen waarin moet worden gezocht. Indien niet gespecificeerd geen enkel pad, de zoekopdracht wordt alleen uitgevoerd in de huidige map en de submappen ervan.

Meestal wordt er gezocht op bestandsnaam, zoals weergegeven in het vorige voorbeeld, d.w.z. de “zoekcriteria” worden gespecificeerd als “-naam bestandsnaam”. In plaats van de optie -name kunt u de optie -path gebruiken. Vervolgens zoekt de opdracht naar overeenkomsten in de volledige bestandsnaam, gevolgd door het pad. Het commando bijvoorbeeld

$vind. -pad "./sr*sc"

zal de submap "./src/misc" in de huidige map vinden. In plaats van de volledige bestands- of mapnaam wordt in dit voorbeeld een zogenaamde "naamsjabloon" gebruikt. Omdat bestandsnaampatronen niet alleen met de opdracht kunnen worden gebruikt vinden, maar ook met vele andere commando's (waaronder de reeds besproken commando's chmod, chown, chgrp, cp, rm, kat, mv), dan moeten de regels voor het maken van sjablonen enige aandacht krijgen.

Meestal worden bestandsnaampatronen opgebouwd met behulp van de speciale tekens "*" en "?". Het symbool "*" wordt gebruikt om een ​​willekeurige reeks tekens te vervangen. Op Linux

    "*" - komt overeen met alle bestanden, behalve verborgen bestanden;

    ".*" - komt overeen met alles verborgen bestanden(maar ook de huidige map " . " en het mapniveau daarboven " .. ": vergeet het niet!);

    "*.*" - komt alleen overeen met de bestanden en mappen met " . " in het midden van de naam, of eindigend met een punt;

    "p*r" - komt overeen met zowel "peter" als "piper";

    "*c*" komt overeen met zowel "gekozen" als "pikken".

Icon ? vervangt één willekeurig teken, dus index?.htm komt overeen met de namen index0.htm, index5.htm en indexa.htm.

Naast "*" en "?" In Linux kun je bij het opgeven van naampatronen vierkante haakjes gebruiken. Deze geven een lijst met mogelijke tekens weer, of een bereik waarbinnen de mogelijke tekens moeten vallen. * komt bijvoorbeeld overeen met alle bestandsnamen die beginnen met a, b, c; * komt overeen met bestanden waarvan de namen eindigen op I, J, K, L, M, N, 1, 2, 3.

Laten we nu teruggaan naar het team vinden en wij vertellen u meer in detail welke zoekcriteria mogelijk zijn. In de tabel vindt u enkele voorbeelden van eenvoudige zoekcriteria. 4.4.

Tabel 4.4. Zoekcriteria voor de zoekopdracht.

Optie

Betekenis

Naam steekproef

Zoekt naar bestanden waarvan de namen overeenkomen met een patroon

Groepsnaam

Zoekt naar bestanden die tot de opgegeven groep behoren

Maat nummer[C]

Zoekt naar bestanden van grootte nummer Blokken van 512 bytes. Als er een c achter het getal staat, wordt de grootte aangegeven in bytes (tekens)

Mtijd nummer

Zoekt naar bestanden die het laatst zijn gewijzigd door de opgegeven nummer dagen geleden

Nieuwer steekproef

Zoekt naar bestanden die zijn gewijzigd sinds het bestand dat in het voorbeeld is opgegeven, is gewijzigd

Type bestandstype

Zoekt naar bestanden van het opgegeven type. Het type wordt gespecificeerd door een van de karakters B(blokgeoriënteerde apparaten), C(byte-georiënteerde apparaten), D(catalogusbestand), F(normaal bestand), P(genaamd pijp) of l(symbolische link)

Andere eenvoudige criteria kun je vinden als je naar de manpagina over het commando kijkt vinden. Hier hoeft u alleen maar te zeggen dat u vanuit eenvoudige criteria complexere criteria kunt bouwen met behulp van logische bewerkingen En, of of een ontkenningsoperatie, waarvan het teken een uitroepteken is. Als u bijvoorbeeld alle bestanden wilt vinden waarvan de namen eindigen op .txt en .doc, dan kan het criterium worden geschreven als (-naam *.txt -of -naam *.doc). Op deze manier kunt u een willekeurig aantal criteria combineren (en niet alleen eenvoudige!). Als de bewerking niet expliciet wordt gespecificeerd, is deze impliciet -En, d.w.z. in plaats daarvan (-naam *.txt -en -naam *.doc) kan eenvoudig geschreven worden (-naam *.txt -naam *.doc). Als er slechts één bewerking wordt toegepast -En of ! , dan kunnen de haakjes meestal worden weggelaten, en met de bewerking -of en in complexe uitdrukkingen zijn haakjes noodzakelijk. U moet een backslash vóór de beugel plaatsen en een spatie na de beugel. Als u bijvoorbeeld een map op naam wilt vinden, kunt u dit doen met de opdracht

$ find /usr -naam doc -type d

of (afhankelijk van de regels voor het opstellen van complexe criteria)

$ find /usr \(-naam doc -en -type d \)

In het volgende voorbeeld zoeken we naar bestanden op basis van de volgende criteria: de bestandsnaam eindigt op *.tmp, of de bestandsgrootte is groter dan 100 KB.

$ find /home/kos \(\(-naam *.tmp \) -or \(-grootte +200 \) \)

In het laatste voorbeeld is het de moeite waard om op te letten dat er een “+” teken voor de maatwaarde staat. Dit teken kan worden gebruikt met elke numerieke parameter in de zoekcriteria voor de opdracht vinden. Dit betekent dat u moet zoeken naar bestanden waarvan de parameterwaarde groter is dan de opgegeven waarde. Dienovereenkomstig is het teken " - " betekent dat u moet zoeken naar bestanden waarvan de parameterwaarde kleiner is dan de opgegeven waarde. Als er geen + of - tekens zijn, wordt er gezocht naar bestanden waarvan de parameterwaarde gelijk is aan de opgegeven waarde.

Om het beoordelen van de opdracht te voltooien vinden, moet ook gezegd worden dat u na het zoekcriterium in deze opdracht onmiddellijk een bewerking kunt opgeven die wordt toegepast op alle bestanden die volgens het opgegeven criterium worden gevonden. Het eenvoudigste voorbeeld van het gebruik van deze functie is het opgeven van de opdracht -afdrukken.

$ vind /home/kos -naam *.tmp -print

die een lijst met namen van alle gevonden bestanden weergeeft, met vermelding van het volledige pad naar het bestand. Deze bewerking wordt standaard gebruikt, dat wil zeggen wanneer er helemaal geen bewerkingen zijn opgegeven (zoals het geval was in alle bovenstaande voorbeelden). Een ander voorbeeld van een bewerking die op alle gevonden bestanden van toepassing is, is de bewerking -exec cmd()\;, Waar cmd- willekeurig commando schelp. Dat wil zeggen dat in dit geval de opdracht wordt toegepast op alle gevonden bestanden (hun namen worden één voor één vervangen door accolades) cmd. Voor cmd() in dit geval moet het worden gevolgd door een puntkomma, gevolgd door een backslash.

Als u bijvoorbeeld alle bestanden in de huidige map wilt verwijderen die al 30 dagen niet door gebruikers zijn geopend, geeft u de opdracht:

# vinden . -type f -atime +30 -exec rm()\;

In plaats van -exec kun je -ok plaatsen, voordat je het opgegeven bestand uitvoert cmd-opdrachten Voor elk bestand wordt om bevestiging gevraagd.

Over het algemeen het team vinden is een zeer krachtige, nuttige en uiterst aanpasbare zoekfunctie voor bestandssystemen. Niet al zijn mogelijkheden worden hier vermeld; lees alstublieft de overeenkomstige manpagina. En wees zeer voorzichtig met het gebruik van opdrachtfuncties, zoals het aanroepen van andere opdrachten die van toepassing zijn op alle gevonden bestanden. Bedenk dat veranderingen vaak onomkeerbaar zijn!

4.6.9. Team gesplitst— splits het bestand in verschillende delen

Soms is het nodig om één groot bestand op te splitsen in meerdere kleinere bestanden. Neem bijvoorbeeld een situatie waarin u een song.mp3-bestand in "MP3"-indeling, met een grootte van 4.894.425 bytes, naar uw thuiscomputer wilt overbrengen. U kunt dit bestand niet via het netwerk downloaden en de enige mogelijke overdrachtsmethode is het gebruik van diskettes. Maar omdat het bestand niet op één diskette past, moet u het in verschillende kleine bestanden splitsen en het vervolgens opnieuw "assembleren". Om dit probleem op te lossen, kunt u het commando gebruiken gesplitst.

Team gesplitst kopieert een bestand en splitst het op in afzonderlijke bestanden van een bepaalde lengte. Als argumenten moet het de naam van het bronbestand en het voorvoegsel van de namen van de uitvoerbestanden specificeren. Namen van uitvoerbestanden zullen bestaan ​​uit dit voorvoegsel en twee extra letters `aa', 'ab', `ac' enz.(geen spaties of punten tussen het voorvoegsel en de letters). Als er geen voorvoegsel voor de bestandsnaam wordt opgegeven, is de standaard 'x', zodat de uitvoerbestanden een naam krijgen `xaa', ` xab ", enz..

Naast de argumenten kunt u de optie -b opgeven, die de grootte van de uitvoerbestanden in bytes bepaalt. De -b moet worden gevolgd door een getal, gevolgd door de letter k (wat aangeeft dat de grootte van het uitvoerbestand in kilobytes is) of m (wat aangeeft dat de grootte in megabytes is). Als de optie niet is opgegeven, wordt standaard aangenomen dat de grootte van de uitvoerbestanden 1 MB is. Om het bestand song.mp3 naar diskettes over te zetten, moet u dus eerst de opdracht geven

$ split -b1400k nummer.mp3 nummer.

kopieer de resulterende bestanden song.aa, song.ab, song.ac, song.ad, song.ae naar afzonderlijke diskettes, breng ze over naar uw thuiscomputer, kopieer ze naar een map en herstel het originele bestand met behulp van de opdracht

$ kattenliedje.* > liedje.mp3

waarna u tijdelijke song.xx-bestanden kunt verwijderen.

4.6.10. Bestandsvergelijking en patchopdracht

Is het je opgevallen dat het de taak is om de inhoud van twee te vergelijken diverse bestanden gebeurt er verrassend vaak bij het werken met een computer? Het is natuurlijk zo gemakkelijk om een ​​bestand te kopiëren, en dan vergeet je welke versie nieuwer of beter is (volgens de criteria van één auteur). Hulpmiddelen voor het vergelijken van bestanden zijn dus eenvoudigweg noodzakelijk, en Linux biedt dergelijke hulpmiddelen.

De eenvoudigste daarvan is het commando cmp. Deze opdracht vergelijkt eenvoudigweg de inhoud van twee bestanden byte voor byte:

$ cmp-bestand1 bestand2

Als de bestanden precies hetzelfde zijn, eindigt het stil (terugkeren naar de opdrachtregel zonder extra berichten), en als de bestanden verschillen, wordt het regelnummer en bytenummer afgedrukt op de regel waar het eerste verschil optrad.

Natuurlijk, de informatie die door de opdracht wordt geproduceerd cmp, is niet genoeg om bijvoorbeeld te beslissen welke van twee bestanden voor ons waardevoller is. Daarom is het de moeite waard om de opdracht te gebruiken verschil om een ​​volledig rapport te krijgen over wat de verschillen zijn in de bestanden waarin we geïnteresseerd zijn. Om een ​​rapport te krijgen, hoeft u alleen maar aan de opdracht te vertellen welke bestanden u wilt vergelijken:

$ diff papier.oud papier.nieuw

Er wordt een rapport van de gedetecteerde verschillen naar de standaarduitvoer verzonden. Uiteraard is het beter om het om te leiden naar een bestand:

$ diff papier.oud papier.nieuw >papier.diff

Om versies van hetzelfde bestand te evalueren, kan de opdracht handiger zijn sdiff, wat het vergelijkingsresultaat oplevert als twee kolommen gescheiden door spaties. Als regels met dezelfde nummers in de bestanden verschillend zijn, dan in de opdrachtuitvoer sdiff ze worden gescheiden door een verticale lijn | . Als een regel alleen in het eerste bestand bestaat, wordt deze gemarkeerd met < . Dienovereenkomstig wordt een regel die alleen in het tweede bestand voorkomt, gemarkeerd met > .

Er is ook een opdracht diff3, waarmee u 3 bestanden tegelijk kunt vergelijken.

Maar toch wordt het traditionele commando voor UNIX-systemen het meest gebruikt verschil. Deze populariteit wordt verklaard door het feit dat het rapport dat het maakt over de verschillen tussen twee bestanden door de opdracht kan worden gebruikt lapje. Deze functies worden het vaakst gebruikt bij het distribueren van software-updates. Laten we aannemen dat een softwaretoepassing onder gebruikers is gedistribueerd in de vorm van een program.c-bestand met de broncode van het programma in C-taal. Hierna heeft de ontwikkelaar enkele correcties in het programma aangebracht en de tekst opgeslagen als bestand program.c.new. Het is vereist om de gecorrigeerde programmatekst naar gebruikers te brengen. Het is duidelijk dat het voor gebruikers voldoende is om alleen correcties te rapporteren, d.w.z. een wijzigingsrapport dat door de opdracht wordt gegenereerd

$ diff programma.c programma.c.nieuw > programma.c.diff

Uiteraard is de grootte van het bestand program.c.diff aanzienlijk kleiner dan de grootte van het bestand program.c.new, dus u kunt aanzienlijk besparen op bestandsoverdrachten als u alleen het bestand program.c.diff naar gebruikers verzendt ( tenslotte het volume van het moderne softwaretoepassingen Dit kan tientallen megabytes bedragen). Gebruikers zouden deze correcties echter moeten kunnen aanbrengen in de versie van het programma waarover zij beschikken. Dit probleem kan door het team worden opgelost lapje. Met program.c- en program.c.diff-bestanden , gebruiker kan commando geven

$ patch programma.c programma.c.diff > programma.c.new

waardoor hij het bestand program.c.new zal ontvangen.

V. Kostromin (kos op rus-linux dot net) - 4.6. Commando's voor het werken met bestanden en mappen cp - kopieer bestanden en mappen

BEOORDELING

cp [ opties] bestand pad cp [ opties] bestand... catalogus POSIX-opties: [-fiprR] [--] Extra opties POSIX 1003.1-2003: [-HLP] GNU file-utils 4.0-opties (korte vorm): [-abdfilprsuvxPR] [-S ACHTERVOEGSEL] [-V (genummerd,bestaand,eenvoudig)] [--back-up=CONTROLE] [--sparse=WANNEER] [--hulp] [--versie] [--] GNU file-utils 4.1 extra opties (korte vorm): [-HLP] [--kopie-inhoud] [--niet behouden] [--antwoord=HOE] [--verwijder-bestemming] [--strip-trailing-slashes] [--doelmap=DIR]

BESCHRIJVING

cp kopieert bestanden (of, indien gevraagd, mappen). U kunt het ene bestand naar het andere kopiëren, een bepaald bestand, of zoveel bestanden als u wilt naar een bepaalde map kopiëren. cp Als het laatste argument een bestaande map is, dan bestand kopieert elk origineel cp naar deze map (met behoud van de namen). Anders, als er slechts twee bestanden worden opgegeven, dan kopieert het eerste bestand naar het tweede. Als er meer dan twee argumenten worden opgegeven die geen opties zijn, en het laatste argument niet de naam van een map is, resulteert dit in een fout.(1) gebruiker (tenzij de optie -p is opgegeven). (Maar tijdens een recursieve kopie van mappen krijgen de nieuw aangemaakte mappen tijdelijk de rechten ORed met de waarde S_IRWXU (0700) om het lezen, schrijven en doorzoeken van de nieuw aangemaakte mappen mogelijk te maken.) cp Als u een bestand naar zichzelf probeert te kopiëren, gebeurt er niets (behalve de mogelijke foutmelding). Wanneer een bestand naar een ander bestaand bestand wordt gekopieerd, wordt het geopend met de aanroep open(path, O_WRONLY | O_TRUNC). Wanneer u naar een nieuw gemaakt bestand kopieert, wordt dit gemaakt met behulp van de aanroep open(path, O_WRONLY | O_CREAT, mode). Als deze oproepen mislukken, wordt aangenomen dat het bestand bestaat, en

geprobeerd het te verwijderen (ontkoppelen), moet u de optie -f opgeven. Als de verwijdering succesvol is, werkt alles zoals het geval is met een nieuw bestand. OPTIES

POSIX -F POSIX heeft vier en een halve optie: -i Verwijdert indien nodig bestaande bestanden waarnaar wordt gekopieerd. (Zie hierboven) Vraagt ​​of bestaande bestanden waarnaar wordt gekopieerd, moeten worden overschreven. (Het verzoek wordt verzonden naar de standaardfoutuitvoer en het antwoord wordt gelezen van de standaardinvoer. Het kopiëren wordt alleen uitgevoerd als het antwoord positief is.)-P Behoudt de originele bestandsparameters zoals eigenaar, groep, toegangsrechten (inclusief suid- en sgid-bits), laatste wijzigingstijd en laatste toegangstijd van het bestand. In het geval dat het instellen van de eigenaar of groep tot een fout leidt, worden de suid- en sgid-bits gewist. (Merk op dat later het originele bestand en de kopie ervan mogelijk zijn verschillende tijden laatste toegang, aangezien de kopieerbewerking toegang tot het bronbestand is).-R Kopieer mappen recursief; correct omgaan met situaties waarin objecten worden aangetroffen die geen gewone bestanden of mappen zijn. (Een kopie van een FIFO- of speciaal bestand zal dus ook een FIFO- of speciaal bestand zijn).-R cp Kopieer mappen recursief; een aantal acties uitvoeren die niet door de standaard zijn gedefinieerd wanneer objecten worden aangetroffen die geen gewone bestanden of mappen zijn. -- (Het is dus toegestaan, en zelfs aangemoedigd, om de optie -r als synoniem voor -R te hebben. Het domme gedrag dat de versie vertoont is echter

niet verboden in GNU 4.0.) geprobeerd het te verwijderen (ontkoppelen), moet u de optie -f opgeven. Als de verwijdering succesvol is, werkt alles zoals het geval is met een nieuw bestand. OPTIES 2003

De POSIX 1003.1-2003-standaard voegt drie opties toe die specificeren hoe symbolische koppelingen moeten worden beheerd. Wanneer een niet-recursieve kopie wordt uitgevoerd, worden symbolische links verwijderd (de objecten waarnaar ze verwijzen worden in plaats van de link zelf genomen - ongeveer). Bij het uitvoeren van een recursieve kopie met de optie -r zijn de resultaten afhankelijk van de implementatie. Bij het uitvoeren van een recursieve kopie met de optie -R: -H Verwijst naar symbolische koppelingen die zijn opgegeven in de parameterlijst. Verwijst niet naar symbolische koppelingen die u tegenkomt tijdens recursief kopiëren, maar kopieert ze eenvoudigweg. -L Derefereert alle symbolische koppelingen, zowel de koppelingen die zijn opgegeven in de parameterlijst als de koppelingen die worden aangetroffen tijdens recursief kopiëren. -P Verwijst niet naar symbolische koppelingen, gespecificeerd in de parameterlijst of aangetroffen tijdens recursief kopiëren. Kopieert ze gewoon als symbolische links.

Er is geen standaardoptie: u moet een van de opties opgeven om het gewenste resultaat te bereiken. DETAILS VERSIES

GNU Normaal gesproken worden bestanden in exact dezelfde vorm geschreven als waarin ze zijn gelezen. Zie hieronder voor optie--schaars Kopieer mappen recursief; correct omgaan met situaties waarin objecten worden aangetroffen die geen gewone bestanden of mappen zijn. (Een kopie van een FIFO- of speciaal bestand zal dus ook een FIFO- of speciaal bestand zijn).). cp, wat een uitzondering is. --kracht --back-up Standaard kopieert cp geen mappen (zie optie weigert meestal het kopiëren van een bestand naar zichzelf, met de volgende uitzondering: als er opties worden gegeven bestand En bestand en tegelijkertijd cp origineel

geprobeerd het te verwijderen (ontkoppelen), moet u de optie -f opgeven. Als de verwijdering succesvol is, werkt alles zoals het geval is met een nieuw bestand. VERSIES

, waarnaar wordt gekopieerd, zijn identiek en zijn dus gewone bestanden --archief zal een reservekopie van het bestand maken: normaal of genummerd, zoals u zegt. Dit is handig als u alleen een reservekopie van een bestaand bestand wilt maken voordat u het wijzigt. Standaard worden symbolische koppelingen niet verwijderd.. -B-A, --kopie-inhoud Behoudt waar mogelijk de structuur en kenmerken van de originele bestanden wanneer deze worden gekopieerd (maar behoudt niet de mapstructuur). Gelijk aan instellingsopties -D Kopieert symbolische koppelingen als symbolische koppelingen in plaats van de bestanden waarnaar ze verwijzen, en behoudt harde koppelingen tussen bronbestanden in de kopieën. In file-utils 4.0 was de lange --no-dereference optie een synoniem voor de -d optie, maar in file-utils 4.1 is het een synoniem voor de -P optie, terwijl de -d optie gelijk is aan de --no -dereference --opties behouden =links. --kracht-F, Verwijdert bestaande bestanden als er een fout optreedt bij het openen ervan om te lezen en vraagt ​​nooit om bevestiging voordat u dit doet. (Dit gedrag begon met file-utils 4.1. In file-utils 4.0 was deze optie gelijk aan nieuwe optie -H--verwijder-bestemming.) (sinds file-utils 4.1) Zie POSIX-beschrijving hierboven. --interactieve-i, Vraagt ​​of bestaande reguliere bestanden moeten worden overschreven. -l,--link Maakt harde links in plaats van gewone bestanden (geen mappen) te kopiëren. -L,--dereferentie (sinds file-utils 4.1) Zie POSIX-beschrijving hierboven.--no-preserve= ATTRIBUTEN (sinds file-utils 4.1) Slaat de opgegeven attributen niet op. Zie de optie --preserve hieronder. --beschermen-P, Beschermt de originele bestandsparameters zoals eigenaar, groep, machtigingen en tijdstempels.--no-preserve=--behoud= (sinds file-utils 4.1) Hier kan de parameter ATTRIBUTES een van de waarden "mode" (toegangsrechten), "ownership" (eigenaar en groep), "timestamps" (tijdstempels), "links", "all" aannemen "(alle bovenstaande). -P,--geen-dereferentie (sinds file-utils 4.1) Zie POSIX-beschrijving hierboven. Deze optie vervangt de optie -P in file-utils 4.0, die synoniem was met de optie --parents. Zie ook de -d optie hierboven.--ouders cp(sinds file-utils 4.0 ook -P) Vormt de naam van elk bestand dat moet worden gekopieerd door de naam van de map waarnaar het kopieert, toe te voegen aan een schuine streep (/) en de opgegeven volledige naam van het bronbestand. Laatste argument gegeven Kopieer mappen recursief; correct omgaan met situaties waarin objecten worden aangetroffen die geen gewone bestanden of mappen zijn. (Een kopie van een FIFO- of speciaal bestand zal dus ook een FIFO- of speciaal bestand zijn). moet de naam zijn van een bestaande map. Met het commando cp --parents a/b/c bestaande_map kopieert u bijvoorbeeld bestand a/b/c naar bestaande_map/a/b/c, waardoor de ontbrekende tussenliggende mappen worden aangemaakt. In file-utils 4.1: een synoniem voor de optie -R. In file-utils 4.0: Kopieert mappen recursief, waarbij alle niet-mappen en niet-symbolische koppelingen (dat wil zeggen FIFO's en speciale bestanden) worden gekopieerd alsof het gewone bestanden zijn. Dit stomme gedrag kan in file-utils 4.1 worden bereikt door de optie --copy-contents op te geven. -R,--recursief Kopieert mappen recursief en beschermt niet-mappen.HOE(sinds file-utils 4.1) Hier kan het HOW-argument een van de waarden "ja", "nee", "query" aannemen, waarmee wordt bepaald welk antwoord automatisch op alle vragen wordt gegeven: "ja", "nee" of "query" aan de gebruiker dienovereenkomstig. --verwijder-bestemming(sinds file-utils 4.1) Verwijdert elk bestaand bestand (op de plaats waar het kopiëren plaatsvindt) voordat het wordt gekopieerd. In file-utils 4.0 was deze optie impliciet ingeschakeld toen de optie -f werd opgegeven. --sparse=WANNEER Een sparse-bestand bevat gaten: reeksen van nul bytes die geen fysieke blokken op de schijf bezetten; systeem oproep read leest ze als nullen. Deze aanpak kan zowel schijfruimte besparen als de werksnelheid verhogen, omdat veel binaire bestanden cp bevatten veel opeenvolgende nulbytes. Standaard, WANNEER identificeert gaten in het bronbestand met behulp van eenvoudige heuristieken en maakt het overeenkomstige uitvoerbestand ook schaars. Parameter kan de volgende waarden aannemen: auto Standaardgedrag: het uitvoerbestand is schaars als het invoerbestand ook schaars is. altijd Zorg er altijd voor dat het uitvoerbestand schaars is. Dit is handig wanneer nooit invoerbestand bevindt zich op een bestandssysteem dat geen sparse-bestanden ondersteunt, en het uitvoerbestand bevindt zich op een bestandssysteem dat deze wel ondersteunt. Maak uitvoerbestanden nooit schaars. Als u een toepassing voor deze optie vindt, laat het ons dan weten. --strip-trailing-slashes (sinds file-utils 4.1) Verwijdert alle afsluitende `´-tekens uit elk argument. (Dit kan de interpretatie van het argument veranderen als het een symbolische link naar een map is.)-S, --symbolische-link Maakt symbolische koppelingen in plaats van niet-mappen te kopiëren. Alle bronbestandsnamen moeten volledig gekwalificeerd zijn, d.w.z. beginnen met een /-teken, behalve wanneer er symbolische koppelingen worden gemaakt in de huidige map. Deze optie genereert een foutmelding als het systeem geen symbolische links ondersteunt. -SBack-upachtervoegsel, zie hieronder.--doelmap= CATALOGUS(sinds file-utils 4.1) Specificeert de doelmap waar de kopie zal worden gemaakt. Bedoeld voor gebruik met xargs (1), zoals in "ls | xargs cp --target-directory=../d".-u, --update Kopieer geen niet-mappen die al bestaan ​​op de locatie waarnaar wordt gekopieerd als deze dezelfde of eerdere wijzigingstijd hebben.-v, -X, --één-bestandssysteem Sla submappen over die zich op een ander bestandssysteem bevinden dan het systeem waarop het kopiëren is gestart.

geprobeerd het te verwijderen (ontkoppelen), moet u de optie -f opgeven. Als de verwijdering succesvol is, werkt alles zoals het geval is met een nieuw bestand. RESERVEREN KOPIËREN VERSIES

GNU-versies van programma's zoals cp, mv, ln, installeren En lapje kan, indien nodig, doen back-ups bestanden die zullen worden overschreven, gewijzigd of vernietigd. Indien gewenst worden er back-ups van bestanden gemaakt met de optie -b. Hoe ze worden genoemd, wordt gespecificeerd door de optie -V. Als de naam van het back-upbestand wordt gemaakt door een achtervoegsel toe te voegen aan de naam van het originele bestand, wordt het achtervoegsel opgegeven met de optie -S. -B, --back-up Maak back-ups van bestanden die worden overschreven of verwijderd. --back-up=CONTROLE(Sinds fileutils-4.1.) --symbolische-link ACHTERVOEGSEL, --achtervoegsel=ACHTERVOEGSEL Toevoegen ACHTERVOEGSEL aan de bestandsnaam bij het maken van een reservekopie. SIMPLE_BACKUP_SUFFIX Als deze optie niet is opgegeven, kan het achtervoegsel ook worden ingesteld met behulp van een omgevingsvariabele Als er geen optie of variabele is opgegeven, is het standaardachtervoegsel ~. -V, METHODE-V--versie-controle= -V Bepaalt hoe de back-upbestanden worden genoemd. Argument VERSIE_CONTROL kan de waarden aannemen genummerd (of t), bestaand (of nul) en nooit (of eenvoudig). Als deze optie niet is opgegeven, wordt de waarde van de omgevingsvariabele gebruikt . Als de waarde van deze variabele niet is ingesteld, wordt het back-uptype standaard ingesteld op bestaand. Deze optie -V komt overeen met de versiecontrolevariabele in Emacs. Geldige waarden T, genummerd zijn (ondubbelzinnige afkortingen zijn toegestaan): nul, bestaande Maak altijd genummerde reservekopieën van bestanden. nooit, eenvoudig Maak genummerde bestandsback-ups voor bestanden die deze al hebben, en eenvoudige back-ups voor andere bestanden.

Maak altijd eenvoudige back-ups. geprobeerd het te verwijderen (ontkoppelen), moet u de optie -f opgeven. Als de verwijdering succesvol is, werkt alles zoals het geval is met een nieuw bestand. VERSIES

--hulp STANDAARD --versie Druk een hint af naar standaarduitvoer en sluit succesvol af. -- Druk versie-informatie af naar standaarduitvoer en sluit succesvol af.

Dient om het einde van een lijst met opties te markeren.

OMGEVING Bij normaal werken worden de waarden gebruikt LANG-variabelen

, LC_ALL, LC_COLLATE, LC_CTYPE en LC_MESSAGES. Voor de GNU-versie worden de variabelen SIMPLE_BACKUP_SUFFIX en VERSION_CONTROL ook gebruikt om het maken van back-ups te regelen, zoals hierboven beschreven.

VERENIGBAARHEID

POSIX 1003.2

OPMERKINGEN cp Deze pagina beschrijft de versie pakket fileutils-4.1; andere versies kunnen kleine verschillen hebben. Correcties en aanvullingen kunt u sturen naar:[e-mailadres beveiligd] pakket fileutils-4.1; andere versies kunnen kleine verschillen hebben. Correcties en aanvullingen kunt u sturen naar:.

. Stuur bugrapporten in dit programma naar:

VERTALING 2003

Deze handleiding laat u zien hoe u bestanden en mappen op uw systeem kunt kopiëren met behulp van opdrachtregel Linux.

Het commando dat wordt gebruikt om bestanden te kopiëren is wo

Hoe een bestand van de ene map naar de andere te kopiëren met Linux

De syntaxis voor het kopiëren van een bestand van de ene locatie naar de andere is als volgt:

Cp /bron/pad/naam /doel/pad/naam

  • thuis
    • andreyex
      • documenten
        • map_één
          • bestand_één
          • bestand_twee
          • bestand_drie
        • map_twee
          • bestand4

Als je file_one wilt kopiëren van de huidige locatie in /home/documents/folder_one naar /home/documents/folder_two, dan moet je de volgende opdracht invoeren in de opdrachtprompt:

Cp /home/andreyex/documents/folder_one/file_one /home/andreyex/documents/folder_two/file_one

Er zijn enkele snelkoppelingen die u hier kunt maken.

/ Het hoofdgedeelte kan worden vervangen door een tilde (~), wat in dit artikel wordt uitgelegd. Dit verandert het commando hierin

cp ~/documenten/folder_one/file_one ~/documents/folder_two/file_one

U kunt eenvoudigweg de bestandsnaam voor het doel weglaten als u dezelfde bestandsnaam gaat gebruiken

Cp ~/documenten/map_één/bestand_één ~/documenten/map_twee

Als u zich al in de doelmap bevindt, kunt u eenvoudig het doelpad vervangen door een punt.

Cp ~/documenten/map_één/bestand_één

Als alternatief, als je al binnen bent originele map u kunt eenvoudig de bestandsnaam als bron opgeven, zoals deze:

Hoe u een back-up maakt voordat u bestanden kopieert in Linux

In de vorige sectie bevat map_één een bestand met de naam file_one en map_twee niet. Stel je voor dat map_twee een bestand heeft met de naam file_one en je voert de volgende opdracht uit:

Cp file_one ~/documents/folder_twee

De bovenstaande opdracht overschrijft bestand_één, dat zich momenteel in map_twee bevindt. Er zijn geen aanwijzingen, geen waarschuwingen en geen foutmeldingen omdat u een geldige opdracht hebt opgegeven.

Je kunt voorzorgsmaatregelen nemen bij het kopiëren van bestanden door Linux een reservekopie van het bestand te laten maken voordat het wordt overschreven. Gebruik gewoon de volgende opdracht:

Cp -b /bron/bestand /doel/bestand

Bijvoorbeeld:

Cp -b ~/documenten/map_één/bestand_één ~/documenten/map_twee/bestand_één

De doelmap bevat nu het bestand dat is gekopieerd en er zal ook een bestand zijn met een tilde (~) aan het einde, wat een reservekopie is van het originele bestand.

U kunt de opdracht backup wijzigen zodat deze op een iets andere manier werkt, zodat er genummerde backups worden gemaakt. U kunt dit doen als u de bestanden al hebt gekopieerd en er al back-ups zijn. Dit is een vorm van versiebeheer

Cp --backup=genummerd ~/documents/folder_één/file_one ~/documents/folder_twee/file_one

De bestandsnaam voor back-ups verandert gaandeweg 1.~1~, file_one.~2~, enz.

Hoe u kunt vragen voordat u bestanden overschrijft bij het kopiëren in Linux

Als u geen back-up wilt maken van bestanden op uw bestandssysteem, maar er ook zeker van wilt zijn dat de kopieeropdracht niet zomaar een bestand overschrijft, wordt u mogelijk gevraagd aan te geven of u wilt overschrijven.

Gebruik hiervoor de volgende syntaxis:

Cp -i /bron/bestand /doel/bestand

Bijvoorbeeld:

Cp -i ~/documents/folder_one/file_one ~/documents/folder_two/file_one

Het bericht ziet er als volgt uit: cp: './file1' overschrijven?

Om een ​​bestand te overschrijven, drukt u op Y op uw toetsenbord, of om te annuleren drukt u tegelijkertijd op N of CTRL en C.

Wat gebeurt er als je symbolische links kopieert in Linux

Stel je voor dat je de volgende mappenstructuur hebt:

  • thuis
    • andreyex
      • documenten
        • map_één
          • bestand_één
        • map_twee
          • file_one (symbolische koppelingen verwijzen naar map_one/file_one)
        • map3

Kijk naar de volgende opdracht:

Cp ~/documenten/folder_one/file_one ~/documents/folder3/file_one

Dit zou niets nieuws moeten zijn, aangezien het kopiëren is fysiek bestand van de ene map naar de andere.

Wat gebeurt er echter als u de symbolische link van map_twee naar map3 kopieert?

Cp ~/documenten/map_twee/bestand_één ~/documenten/map3/bestand_één

Het bestand dat naar map3 wordt gekopieerd, is geen symbolische link. Dit is feitelijk het bestand waar de symlink naar verwijst, dus in feite krijgt u hetzelfde resultaat als wanneer u file_one uit map_one kopieert.

Overigens kun je hetzelfde resultaat krijgen met de volgende opdracht:

Cp -H ~/documenten/map_twee/bestand_één ~/documenten/map3/bestand_één

Voor de zekerheid is er echter nog een andere schakelaar die absoluut dwingt dat het bestand wordt gekopieerd en niet de symlink:

Cp -L ~/documenten/map_twee/bestand_één ~/documenten/map3/bestand_één

Als u een symbolische link wilt kopiëren, moet u het volgende commando opgeven:

Cp -d ~/documenten/map_twee/bestand_één ~/documenten/map3/bestand_één

Cp -P ~/documenten/map_twee/bestand_één ~documenten/map3/bestand_één

Hoe u harde koppelingen maakt met behulp van de opdracht cp

Deze gids vertelt u alles wat u moet weten over harde links.

Cp -l ~/bron/bestand ~/doel/bestand

Als voorbeeld van waarom u een harde link zou kunnen gebruiken, kunt u bedenken dat u een map heeft met de naam video's en dat u zich binnen die videomap daadwerkelijk bevindt geweldig filmpje bestand met de naam huwelijksreis_video.mp4. Stel je nu voor dat je ook wilt dat de video bekend staat als barbados_video.mp4, omdat deze ook beelden van Barbados bevat.

U kunt het bestand eenvoudig kopiëren en een nieuwe naam geven, maar dat betekent dat u twee keer zoveel schijfruimte toevoegt voor wat in wezen dezelfde video is.

U kunt in plaats daarvan een symbolische link maken met de naam barbados_video.mp4 die verwijst naar het bestand honeymoon_video.mp4. Dit zou goed werken, maar als iemand honeymoon_video.mp4 zou verwijderen, zou je de link overhouden en niets anders, en de link zou nog steeds schijfruimte in beslag nemen.

Het enige verschil is dat ze bevatten verschillende hoeveelheden indexbeschrijvingen. (unieke identificatiegegevens). Als u het bestand honeymoon_video.mp4 verwijdert, wordt het bestand niet verwijderd, maar wordt het aantal voor dat bestand alleen met 1 verminderd. Het bestand wordt alleen verwijderd als alle verwijzingen naar dat bestand zijn verwijderd.

Cp -l /videos/huwelijksreis_video.mp4 /videos/barbados_video.mp4

Hoe symbolische koppelingen te maken met behulp van de opdracht cp

Cp -s /bron/bestand /doel/bestand

Nogmaals, persoonlijk zou ik over het algemeen de opdracht ln -s gebruiken, maar dit werkt in plaats daarvan goed.

Bestanden kopiëren als ze nieuwer zijn

Als u bestanden naar een map wilt kopiëren, maar alleen de doelbestanden wilt overschrijven als het bronbestand nieuwer is, kunt u de volgende opdracht gebruiken:

Cp -u /bron/bestand /doel/bestand

Het is vermeldenswaard dat als het bestand niet aan de doelzijde bestaat, er een kopie zal plaatsvinden.

Hoe meerdere bestanden te kopiëren

U kunt meer dan één bronbestand opgeven in een kopieeropdracht, zoals deze:

Cp /source/file_one /source/file_two /source/file_three /target

De bovenstaande opdracht kopieert file_one, file_two en file_three naar de doelmap.

Als de bestanden aan een bepaald patroon voldoen, kunt u ook jokertekens als volgt gebruiken:

Cp /home/andreyex/muziek/*.mp3 /home/andreyex/muziek2

Met de bovenstaande opdracht worden alle bestanden met de extensie .mp3 naar de map music2 gekopieerd.

Hoe mappen te kopiëren

Het kopiëren van mappen is hetzelfde als het kopiëren van bestanden.

Stel je bijvoorbeeld voor dat je de volgende mappenstructuur hebt:

  • thuis
    • andreyex
      • documenten
        • map_één
          • bestand_één
          • bestand_twee
        • map_twee

Stel je voor dat je de map map_één als volgt naar de map map_twee wilt verplaatsen:

  • thuis
    • andreyex
      • documenten
        • map_twee
          • map_één
            • bestand_één
            • bestand_twee

U kunt de volgende opdracht gebruiken:

Cp -r /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

Als alternatief kunt u de volgende opdracht gebruiken:

Cp -R /home/andreyex/documents/folder_one /home/andreyex/documents/folder_two

Hiermee kopieert u de inhoud van map_één, evenals eventuele submappen en bestanden in submappen.

Cv

Deze handleiding heeft je de tools gegeven die je nodig hebt om bestanden op Linux te kopiëren. Voor al het andere kun je het gebruiken Linux-opdracht man.