SUSE 10.0 xargs and opening different file extensions

Posted on 2006-04-04
Last Modified: 2012-05-05
I am using SUSE 10.0.  I have some files that appear either as .zip or .txt randomly.  Each file has a date / time stamp connected to them.  They are in the following format.

    The "BOBapp04-04-2006@19-00-" are standard.  I can add in a date function to that portion of the file.  The 05 is the second and that seems to be random within 20 seconds depending on when the script actually runs.  I would like to determine if it is a txt or zip, extract if it is a zip, then change the file name to something that is not random (but keep the date functionality).

Does anyone have any recommendations?  I'm giving alot of points for this as I want to test the script to get it working before giving out the points!

Question by:awakenings
    LVL 15

    Expert Comment

    Can you elaborate on "something that is not random" ?

    Everything you mentioned so far is a one-liner.

    Author Comment

    I would love the file name to be;

    BOBapp04-04-2006@19-00.txt for example.
    LVL 15

    Assisted Solution

    for Z in *.zip; do unzip "$Z"; done
    for T in *\@[0-9][0-9]-[0-9][0-9]-[0-9][0-9].txt; do \mv -i "$T" "${T%-??.txt}.txt"; done

    Author Comment


          I am testing things here.  You will have to forgive the fact I am a little slow.  I am a windows guy attempting to learn Linux.  I did some testing with some of this.  I could type in unzip BOBapp04-04-2006* and it would unzip the file.  I could type in mv BOBapp04-04-2006@15-00-??.txt app04-04-06.txt and the file would rename.  What I do not get is how do I collect random files and if they are zip, unzip and rename themthem and if they are txt file just rename them.  I was told the xargs command could do that.  Do you have another suggestions?

         I must admit I did not fully understand the statements above as I am no programmer.  How do I take this stuff and make it into a cron job?  I have the date functionality down so that will be easy.  I know how to do a cron job, but I am fuzzy on taking the random endings (txt or zip) and turn them into just functional txt file.  I then intend to run another cron job to run the files through swatch.  I am trying to automate a process to make things easier for me.


    LVL 15

    Accepted Solution

    You would only need xargs if you are going to have more than 64 KB worth of filenames, at that point *.txt or *.zip will make the argument list too long.
    If you run in to that problem, you could use these commands instead of my last example:

        find . -name \*.zip -print0 | xargs -0 -n1 unzip
        find . -name "*@[0-9][0-9]-[0-9][0-9]-[0-9][0-9].txt" -print0 | xargs -0 -n1 sh -c 'mv -i "$1" "${1%-??.txt}.txt"' none

    > What I do not get is how do I collect random files and if they are zip

    Shell wildcards let you pass filename(s) using wildcards.   Try this out:

        echo Hello World
        echo *.zip
        echo *.txt

    Another method, usually used only when you're going to have massive amounts of files, is find piped to xargs.  E.g:

       find . -name "*.txt" | xargs echo
       find . -name "*.txt" | xargs -n1 echo

    xargs takes the filenames piped to it and passes them to the command you specify, running the command multiple times if the argument list is too long.

    To add the commands to a cron job, just put them in a shell script, chmod +x it, and specify the full path to it in your cron job.
    To create a shell script, simply create a file, put the following line at the top:


    and put your commands after it.   Since a cron job will start in your home directory, you'll probably need to have a cd command which changes to the directory where the files are located before executing your commands.

    Featured Post

    What Is Threat Intelligence?

    Threat intelligence is often discussed, but rarely understood. Starting with a precise definition, along with clear business goals, is essential.

    Join & Write a Comment

    Linux users are sometimes dumbfounded by the severe lack of documentation on a topic. Sometimes, the documentation is copious, but other times, you end up with some obscure "it varies depending on your distribution" over and over when searching for …
    It’s 2016. Password authentication should be dead — or at least close to dying. But, unfortunately, it has not traversed Quagga stage yet. Using password authentication is like laundering hotel guest linens with a washboard — it’s Passé.
    Learn several ways to interact with files and get file information from the bash shell. ls lists the contents of a directory: Using the -a flag displays hidden files: Using the -l flag formats the output in a long list: The file command gives us mor…
    Learn how to get help with Linux/Unix bash shell commands. Use help to read help documents for built in bash shell commands.: Use man to interface with the online reference manuals for shell commands.: Use man to search man pages for unknown command…

    745 members asked questions and received personalized solutions in the past 7 days.

    Join the community of 500,000 technology professionals and ask your questions.

    Join & Ask a Question

    Need Help in Real-Time?

    Connect with top rated Experts

    16 Experts available now in Live!

    Get 1:1 Help Now