Vraag Hoe verplaats ik alle bestanden in de huidige map naar de submap?


Ik ben op het pad:

/myuser/downloads/

En ik maak een submap aan:

/myuser/downloads/new

Nu wil ik alle bestanden en mappen / submappen in de downloadmap naar de submap verplaatsen.

hoe kan ik dit doen?

Ik heb geprobeerd:

mv -R *.* new/

Maar verplaatsen neemt niet de -R schakelaar naar het schijnt.


45
2017-12-31 12:38


oorsprong


U hebt -R niet nodig. Net mv * new Hoewel, het zal jammeren "kan niet nieuw naar nieuw verplaatsen" of iets dergelijks. Misschien mv -i * new om te voorkomen dat u overschrijft.


antwoorden:


Het bevel

mv !(new) new

zou het moeten doen. Als het niet werkt, start dan shopt -s extglob eerste.

Verplaats ook verborgen bestanden / mappen (die beginnen met een punt) shopt -s dotglob eerste.
Dus kort samengevat:

shopt -s extglob dotglob
mv !(new) new
shopt -u dotglob

(het is altijd beter om uit te schakelen dotglob om vervelende verrassingen te voorkomen).


72
2017-12-31 12:57



Bedankt voor je info. Het werkt voor mij. Ik ben er al heel lang naar op zoek. - Mughil
kan je vermelden wat de betekenis is van !(something) ? - a deer
@adeer dat is gewoon niet zeggen (iets). Met andere woorden, kopieer alles maar niet iets. Helder als modder? - RockyMountainHigh
heel. weet je toevallig het equivalent voor zsh? - a deer
@adeer lijkt erg op elkaar. setopt extendedglob om de uitgebreide glob-modus in zsh in te stellen. ^ is het uitsluitingssymbool, dus mv ^new new zou het lukken. dan om alle opties te zien die zijn ingesteld in zsh die je kunt gebruiken setopt en om uitgebreide glob-modus uit te schakelen die je kunt doen unsetopt extendedglob - Mr. T


Ik vond dat iets als dit een beetje eenvoudiger was, dat zou goed voor je kunnen werken:

ls | grep -v new | xargs mv -t new

Een verklaring toevoegen aan de bovenstaande oplossing:

Van manpagina's:

  • mv -t

    -t, --target-directory=DIRECTORY
          move all SOURCE arguments into DIRECTORY
    
  • grep -v

    -v, --invert-match
          Invert the sense of matching, to select non-matching lines.
    

Uitgelegd per stap:

  • ls toont de bestanden in de huidige map
  • grep -v nieuw zal teruggevoerd worden naar dat is niet nieuw
  • xargs mv -t new verplaatst de bestanden die er naar toe worden gestuurd grep -v naar de doelmap

4
2017-08-31 22:59



Je moet uitleggen wat elke opdracht en parameter doet. Op het eerste gezicht weet ik niet eens zeker of het werkt. - WinEunuuchs2Unix
Downvote intrekken en upvote toevoegen. Bedankt voor de uitleg. - WinEunuuchs2Unix


Eenvoudig idee. Ervan uitgaande dat je in bent / myuser, hernoem downloads naar nieuwe, maak een nieuw downloads map verplaatsen en verplaatsen nieuwe erin.

mv downloads new # downloads is now called new
mkdir downloads # create new directory downloads
mv new downloads # move new into it.

2
2017-09-05 21:56





Als u alle bestanden uit een map naar een van de submappen ervan wilt verplaatsen, kunt u de volgende opdracht gebruiken:

find /myuser/downloads/ -type d -name 'new' -prune -type f | xargs mv -t /myuser/downloads/new

Het zal alle bestanden vinden en ze vervolgens naar uw submap verplaatsen.

@waltinator: toegevoegd -type d -name 'new' -prune om doorlopen van te voorkomen /myuser/downloads/new.


1
2017-10-13 14:00



Ik heb een submap gemaakt met de naam new en probeerde dit commando, ik snap het mv: missing file operand en Try 'mv --help' for more information - mook765