Extracting names from filename in Bash The Next CEO of Stack Overflowbash escaping and find commandUnexpected anwer from the following regex?Removing a string of files with renameExtracting URL links from a FileExtracting specific data in a file using regexExclude directories from inotifywaitHow to specify a filename while extracting audio using youtube-dl?Bash create custom stringRegular expressions VS Filename globbingRegular expression to pull db table names from .sql files

Calculate the Mean mean of two numbers

Why is information "lost" when it got into a black hole?

Using multiple Nameservers to use different services

What was Carter Burkes job for "the company" in "Aliens"?

Example of a Mathematician/Physicist whose Other Publications during their PhD eclipsed their PhD Thesis

Decide between Polyglossia and Babel for LuaLaTeX in 2019

Do I need to write [sic] when including a quotation with a number less than 10 that isn't written out?

Traduction de « Life is a roller coaster »

From jafe to El-Guest

Why the last AS PATH item always is `I` or `?`?

Inexact numbers as keys in Association?

Towers in the ocean; How deep can they be built?

How to properly draw diagonal line while using multicolumn inside tabular environment?

Does regularization penalize models that are simpler than needed?

How to set page number in right side in chapter title page?

Is dried pee considered dirt?

How many extra stops do monopods offer for tele photographs?

Can I calculate next year's exemptions based on this year's refund/amount owed?

(How) Could a medieval fantasy world survive a magic-induced "nuclear winter"?

Aggressive Under-Indexing and no data for missing index

What happened in Rome, when the western empire "fell"?

Is it okay to majorly distort historical facts while writing a fiction story?

My ex-girlfriend uses my Apple ID to login to her iPad, do I have to give her my Apple ID password to reset it?

IC has pull-down resistors on SMBus lines?



Extracting names from filename in Bash



The Next CEO of Stack Overflowbash escaping and find commandUnexpected anwer from the following regex?Removing a string of files with renameExtracting URL links from a FileExtracting specific data in a file using regexExclude directories from inotifywaitHow to specify a filename while extracting audio using youtube-dl?Bash create custom stringRegular expressions VS Filename globbingRegular expression to pull db table names from .sql files










4















I have a directory filled with thousands of files in the format LastnameFirstnameYYYYMMDD.pdf. The last and first name will always been in title case.



I'd like to extract the last name so I can move these files to a directory structure of first letter of last name/lastname/full filename. Example: DoeJohn20190327 would be moved to D/Doe/DoeJohn20190327










share|improve this question









New contributor




Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 3





    Check out 'sed' and 'awk'

    – Tintin
    2 days ago











  • I'm not sure if the final destination of the file DoeJohn20190327.pdf is like this: D/Doe/DoeJohn20190327/DoeJohn20190327.pdf or D/Doe/DoeJohn20190327/DoeJohn20190327.pdf ?

    – Philippe Delteil
    2 days ago
















4















I have a directory filled with thousands of files in the format LastnameFirstnameYYYYMMDD.pdf. The last and first name will always been in title case.



I'd like to extract the last name so I can move these files to a directory structure of first letter of last name/lastname/full filename. Example: DoeJohn20190327 would be moved to D/Doe/DoeJohn20190327










share|improve this question









New contributor




Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.















  • 3





    Check out 'sed' and 'awk'

    – Tintin
    2 days ago











  • I'm not sure if the final destination of the file DoeJohn20190327.pdf is like this: D/Doe/DoeJohn20190327/DoeJohn20190327.pdf or D/Doe/DoeJohn20190327/DoeJohn20190327.pdf ?

    – Philippe Delteil
    2 days ago














4












4








4


0






I have a directory filled with thousands of files in the format LastnameFirstnameYYYYMMDD.pdf. The last and first name will always been in title case.



I'd like to extract the last name so I can move these files to a directory structure of first letter of last name/lastname/full filename. Example: DoeJohn20190327 would be moved to D/Doe/DoeJohn20190327










share|improve this question









New contributor




Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.












I have a directory filled with thousands of files in the format LastnameFirstnameYYYYMMDD.pdf. The last and first name will always been in title case.



I'd like to extract the last name so I can move these files to a directory structure of first letter of last name/lastname/full filename. Example: DoeJohn20190327 would be moved to D/Doe/DoeJohn20190327







regex






share|improve this question









New contributor




Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.











share|improve this question









New contributor




Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









share|improve this question




share|improve this question








edited yesterday









Peter Mortensen

1,03421016




1,03421016






New contributor




Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.









asked 2 days ago









Joseph MoorJoseph Moor

211




211




New contributor




Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.





New contributor





Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.






Joseph Moor is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.







  • 3





    Check out 'sed' and 'awk'

    – Tintin
    2 days ago











  • I'm not sure if the final destination of the file DoeJohn20190327.pdf is like this: D/Doe/DoeJohn20190327/DoeJohn20190327.pdf or D/Doe/DoeJohn20190327/DoeJohn20190327.pdf ?

    – Philippe Delteil
    2 days ago













  • 3





    Check out 'sed' and 'awk'

    – Tintin
    2 days ago











  • I'm not sure if the final destination of the file DoeJohn20190327.pdf is like this: D/Doe/DoeJohn20190327/DoeJohn20190327.pdf or D/Doe/DoeJohn20190327/DoeJohn20190327.pdf ?

    – Philippe Delteil
    2 days ago








3




3





Check out 'sed' and 'awk'

– Tintin
2 days ago





Check out 'sed' and 'awk'

– Tintin
2 days ago













I'm not sure if the final destination of the file DoeJohn20190327.pdf is like this: D/Doe/DoeJohn20190327/DoeJohn20190327.pdf or D/Doe/DoeJohn20190327/DoeJohn20190327.pdf ?

– Philippe Delteil
2 days ago






I'm not sure if the final destination of the file DoeJohn20190327.pdf is like this: D/Doe/DoeJohn20190327/DoeJohn20190327.pdf or D/Doe/DoeJohn20190327/DoeJohn20190327.pdf ?

– Philippe Delteil
2 days ago











2 Answers
2






active

oldest

votes


















5














Here you have a solution. I tested it an it creates the folders as you explained.



for filename in *.pdf
do
echo "Processing file $filename "
first_letter="$filename:0:1"
mkdir -p $first_letter #if already exists won't print error
last_name=$(echo $filename | sed 's/([^[:blank:]])([[:upper:]])/1 2/g' |awk 'print $1')
mkdir -p $first_letter/$last_name
mv $filename $first_letter/$last_name
done





share|improve this answer
































    4














    If the lastname is always the shortest trailing string staring with an upper case letter (there are no compound lastnames for example) you could use a shell parameter expansion of the form $parameter%pattern in place of a regex solution.



    Ex.



    for f in [[:upper:]]*[[:upper:]]*; do 
    d="$f:0:1/$f%[[:upper:]]*/"
    echo mkdir -p "$d"
    echo mv "$f" "$d"
    done
    mkdir -p D/Doe/
    mv DoeJohn20190327 D/Doe/


    Remove the echos when you are satisfied that it is doing the right thing.



    See for example Parameter Expansion






    share|improve this answer























      Your Answer








      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "89"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );






      Joseph Moor is a new contributor. Be nice, and check out our Code of Conduct.









      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1129576%2fextracting-names-from-filename-in-bash%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      5














      Here you have a solution. I tested it an it creates the folders as you explained.



      for filename in *.pdf
      do
      echo "Processing file $filename "
      first_letter="$filename:0:1"
      mkdir -p $first_letter #if already exists won't print error
      last_name=$(echo $filename | sed 's/([^[:blank:]])([[:upper:]])/1 2/g' |awk 'print $1')
      mkdir -p $first_letter/$last_name
      mv $filename $first_letter/$last_name
      done





      share|improve this answer





























        5














        Here you have a solution. I tested it an it creates the folders as you explained.



        for filename in *.pdf
        do
        echo "Processing file $filename "
        first_letter="$filename:0:1"
        mkdir -p $first_letter #if already exists won't print error
        last_name=$(echo $filename | sed 's/([^[:blank:]])([[:upper:]])/1 2/g' |awk 'print $1')
        mkdir -p $first_letter/$last_name
        mv $filename $first_letter/$last_name
        done





        share|improve this answer



























          5












          5








          5







          Here you have a solution. I tested it an it creates the folders as you explained.



          for filename in *.pdf
          do
          echo "Processing file $filename "
          first_letter="$filename:0:1"
          mkdir -p $first_letter #if already exists won't print error
          last_name=$(echo $filename | sed 's/([^[:blank:]])([[:upper:]])/1 2/g' |awk 'print $1')
          mkdir -p $first_letter/$last_name
          mv $filename $first_letter/$last_name
          done





          share|improve this answer















          Here you have a solution. I tested it an it creates the folders as you explained.



          for filename in *.pdf
          do
          echo "Processing file $filename "
          first_letter="$filename:0:1"
          mkdir -p $first_letter #if already exists won't print error
          last_name=$(echo $filename | sed 's/([^[:blank:]])([[:upper:]])/1 2/g' |awk 'print $1')
          mkdir -p $first_letter/$last_name
          mv $filename $first_letter/$last_name
          done






          share|improve this answer














          share|improve this answer



          share|improve this answer








          edited 2 days ago

























          answered 2 days ago









          Philippe DelteilPhilippe Delteil

          5601422




          5601422























              4














              If the lastname is always the shortest trailing string staring with an upper case letter (there are no compound lastnames for example) you could use a shell parameter expansion of the form $parameter%pattern in place of a regex solution.



              Ex.



              for f in [[:upper:]]*[[:upper:]]*; do 
              d="$f:0:1/$f%[[:upper:]]*/"
              echo mkdir -p "$d"
              echo mv "$f" "$d"
              done
              mkdir -p D/Doe/
              mv DoeJohn20190327 D/Doe/


              Remove the echos when you are satisfied that it is doing the right thing.



              See for example Parameter Expansion






              share|improve this answer



























                4














                If the lastname is always the shortest trailing string staring with an upper case letter (there are no compound lastnames for example) you could use a shell parameter expansion of the form $parameter%pattern in place of a regex solution.



                Ex.



                for f in [[:upper:]]*[[:upper:]]*; do 
                d="$f:0:1/$f%[[:upper:]]*/"
                echo mkdir -p "$d"
                echo mv "$f" "$d"
                done
                mkdir -p D/Doe/
                mv DoeJohn20190327 D/Doe/


                Remove the echos when you are satisfied that it is doing the right thing.



                See for example Parameter Expansion






                share|improve this answer

























                  4












                  4








                  4







                  If the lastname is always the shortest trailing string staring with an upper case letter (there are no compound lastnames for example) you could use a shell parameter expansion of the form $parameter%pattern in place of a regex solution.



                  Ex.



                  for f in [[:upper:]]*[[:upper:]]*; do 
                  d="$f:0:1/$f%[[:upper:]]*/"
                  echo mkdir -p "$d"
                  echo mv "$f" "$d"
                  done
                  mkdir -p D/Doe/
                  mv DoeJohn20190327 D/Doe/


                  Remove the echos when you are satisfied that it is doing the right thing.



                  See for example Parameter Expansion






                  share|improve this answer













                  If the lastname is always the shortest trailing string staring with an upper case letter (there are no compound lastnames for example) you could use a shell parameter expansion of the form $parameter%pattern in place of a regex solution.



                  Ex.



                  for f in [[:upper:]]*[[:upper:]]*; do 
                  d="$f:0:1/$f%[[:upper:]]*/"
                  echo mkdir -p "$d"
                  echo mv "$f" "$d"
                  done
                  mkdir -p D/Doe/
                  mv DoeJohn20190327 D/Doe/


                  Remove the echos when you are satisfied that it is doing the right thing.



                  See for example Parameter Expansion







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 2 days ago









                  steeldriversteeldriver

                  70.5k11114187




                  70.5k11114187




















                      Joseph Moor is a new contributor. Be nice, and check out our Code of Conduct.









                      draft saved

                      draft discarded


















                      Joseph Moor is a new contributor. Be nice, and check out our Code of Conduct.












                      Joseph Moor is a new contributor. Be nice, and check out our Code of Conduct.











                      Joseph Moor is a new contributor. Be nice, and check out our Code of Conduct.














                      Thanks for contributing an answer to Ask Ubuntu!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1129576%2fextracting-names-from-filename-in-bash%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Bulk add to cart function issuecart vs. mini cart issue … rwd themeRedirect Add to cart button to cart pageAdd to cart issue - Magento 2.1The requested Payment Method is not available When creating an orderM2: reason add-to-cart might not function in production modeAdd to cart issue in some android devicesMagento 2 - custom price can not add to subtotal and grand total after add to cartAdd to cart codeIssue with my cart module on pdp and cart pages, just keeps spinningBulk price and quantity update using rest api

                      Category menu linking direct to productHow to create an new observer on the event catalog_product_save_beforePHP else: statements in addtocart.phtml - Adding conditions to the Add To Cart button on product pageAdd template to custom adminhtml buttonAdd category title to product view pageEdit layered navigation filter titles in Magento 1.9.2Have category page main menu based on current categoryProduct collection displaying wrong categoryHow Can I Customize Magento Default URL (Product URL and Category URL)Programatically add cross sell products to all products within a certain categoryHow to create custom link for category?Creating Custom 'Buy Now' button with Custom buy now link