Bash: for loop, copy, backup

19,114

Solution 1

The * shouldn't be in quotes:

for f in * ; do cp $f ../backup/$f ; done

When you use quotes this prevents the shell from expanding it, so it is looking for a file called *, not all files in the directory which is what you meant.

Solution 2

You are quoting the wrong things: quote the variables, not the wildcards!

% for f in *; do cp "$f" "../backup/$f" ; done

BTW, in this case, you can simply do:

% cp * ../backup/

Solution 3

Or may be this:

cp -b * ../backup 

If you want them to be renamed:

% for f in * ; do cp "$f" "../backup/${f}-backup" ; done
Share:
19,114
sixtyfootersdude
Author by

sixtyfootersdude

Updated on June 04, 2022

Comments

  • sixtyfootersdude
    sixtyfootersdude almost 2 years

    Hey, not 100% sure what this error means.

    % for f in "*" ; do cp $f ../backup/backup$f ; done
    cp: ../backup/backup* not found
    

    The purpose is to copy all the files into a folder into a backup folder and rename the files to backup.