8

I am following this question to extract a zip. Is there a way to automatically add a number after the file extracted when there is an existing file with the same name?

For example, I have example.zip with a file called contents.csv. My directory is this:

contents.csv   example.zip

Currently, when I unzip the folder I get prompted:

$ unzip example.zip
Archive:  example.zip
replace contents.csv? [y]es, [n]o, [A]ll, [N]one, [r]ename: y

Instead, I just want to run unzip example.zip then have a number (-1) automatically appended to the file name in the case of a clash like this:

contents-1.csv   contents.csv   example.zip

Running unzip example.zip again would give this:

contents-2.csv   contents-1.csv   contents.csv   example.zip

Some GUI software already does this, but I want to do it from a script.

1 Answer 1

10

You can do it with the -B switch.

   -B     [when compiled with UNIXBACKUP defined] save a  backup  copy  of
          each  overwritten  file. The backup file is gets the name of the
          target file with a tilde and optionally a unique sequence number
          (up to 5 digits) appended.  The sequence number is applied when‐
          ever another file with the  original  name  plus  tilde  already
          exists.   When used together with the "overwrite all" option -o,
          numbered backup files are  never  created.  In  this  case,  all
          backup  files  are  named  as the original file with an appended
          tilde, existing backup files are deleted without  notice.   This
          feature  works  similarly to the default behavior of emacs(1) in
          many locations.

          Example: the old copy of ``foo'' is renamed to ``foo~''.

          Warning: Users should be aware that the -B option does not  pre‐
          vent  loss  of existing data under all circumstances.  For exam‐
          ple, when unzip  is  run  in  overwrite-all  mode,  an  existing
          ``foo~'' file is deleted before unzip attempts to rename ``foo''
          to ``foo~''.  When this rename attempt fails (because of a  file
          locks,  insufficient  privileges,  or  ...),  the  extraction of
          ``foo~'' gets cancelled, but the  old  backup  file  is  already
          lost.   A  similar scenario takes place when the sequence number
          range for numbered backup files gets exhausted (99999, or  65535
          for  16-bit  systems).   In  this case, the backup file with the
          maximum sequence number is  deleted  and  replaced  by  the  new
          backup version without notice.

Example:

terrance@terrance-ubuntu:~/testdir$ ls
20161203_202646.jpg  20170610_110407-PANO.jpg
20161225_150835.jpg  98percenteffective.jpg
20170204_192943.jpg  Home_Is_dog_hair.jpg
20170204_193007.jpg  images.jpg
20170204_193309.jpg  img_7230.jpg
20170204_194206.jpg  ps_2013_12_29___11_47_19_fixed.jpg
20170322_230834.jpg  ps_2013_12_29___11_47_19.jpg
20170401_200805.jpg  unnamed.jpg
-------------------------------------------------------------- 06/27/17 20:43:56
terrance@terrance-ubuntu:~/testdir$ zip newfiles.zip *
  adding: 20161203_202646.jpg (deflated 1%)
  adding: 20161225_150835.jpg (deflated 0%)
  adding: 20170204_192943.jpg (deflated 0%)
  adding: 20170204_193007.jpg (deflated 0%)
  adding: 20170204_193309.jpg (deflated 0%)
  adding: 20170204_194206.jpg (deflated 3%)
  adding: 20170322_230834.jpg (deflated 1%)
  adding: 20170401_200805.jpg (deflated 0%)
  adding: 20170610_110407-PANO.jpg (deflated 1%)
  adding: 98percenteffective.jpg (deflated 1%)
  adding: Home_Is_dog_hair.jpg (deflated 4%)
  adding: images.jpg (deflated 0%)
  adding: img_7230.jpg (deflated 0%)
  adding: ps_2013_12_29___11_47_19_fixed.jpg (deflated 1%)
  adding: ps_2013_12_29___11_47_19.jpg (deflated 0%)
  adding: unnamed.jpg (deflated 0%)
-------------------------------------------------------------- 06/27/17 20:44:03
terrance@terrance-ubuntu:~/testdir$ unzip -B newfiles.zip 
Archive:  newfiles.zip
  inflating: 20161203_202646.jpg     
  inflating: 20161225_150835.jpg     
  inflating: 20170204_192943.jpg     
  inflating: 20170204_193007.jpg     
  inflating: 20170204_193309.jpg     
  inflating: 20170204_194206.jpg     
  inflating: 20170322_230834.jpg     
  inflating: 20170401_200805.jpg     
  inflating: 20170610_110407-PANO.jpg  
  inflating: 98percenteffective.jpg  
  inflating: Home_Is_dog_hair.jpg    
  inflating: images.jpg              
  inflating: img_7230.jpg            
  inflating: ps_2013_12_29___11_47_19_fixed.jpg  
  inflating: ps_2013_12_29___11_47_19.jpg  
  inflating: unnamed.jpg             
-------------------------------------------------------------- 06/27/17 20:44:12
terrance@terrance-ubuntu:~/testdir$ ls
20161203_202646.jpg       20170610_110407-PANO.jpg~
20161203_202646.jpg~      98percenteffective.jpg
20161225_150835.jpg       98percenteffective.jpg~
20161225_150835.jpg~      Home_Is_dog_hair.jpg
20170204_192943.jpg       Home_Is_dog_hair.jpg~
20170204_192943.jpg~      images.jpg
20170204_193007.jpg       images.jpg~
20170204_193007.jpg~      img_7230.jpg
20170204_193309.jpg       img_7230.jpg~
20170204_193309.jpg~      newfiles.zip
20170204_194206.jpg       ps_2013_12_29___11_47_19_fixed.jpg
20170204_194206.jpg~      ps_2013_12_29___11_47_19_fixed.jpg~
20170322_230834.jpg       ps_2013_12_29___11_47_19.jpg
20170322_230834.jpg~      ps_2013_12_29___11_47_19.jpg~
20170401_200805.jpg       unnamed.jpg
20170401_200805.jpg~      unnamed.jpg~
20170610_110407-PANO.jpg
-------------------------------------------------------------- 06/27/17 20:44:13
terrance@terrance-ubuntu:~/testdir$ unzip -B newfiles.zip 
Archive:  newfiles.zip
  inflating: 20161203_202646.jpg     
  inflating: 20161225_150835.jpg     
  inflating: 20170204_192943.jpg     
  inflating: 20170204_193007.jpg     
  inflating: 20170204_193309.jpg     
  inflating: 20170204_194206.jpg     
  inflating: 20170322_230834.jpg     
  inflating: 20170401_200805.jpg     
  inflating: 20170610_110407-PANO.jpg  
  inflating: 98percenteffective.jpg  
  inflating: Home_Is_dog_hair.jpg    
  inflating: images.jpg              
  inflating: img_7230.jpg            
  inflating: ps_2013_12_29___11_47_19_fixed.jpg  
  inflating: ps_2013_12_29___11_47_19.jpg  
  inflating: unnamed.jpg             
-------------------------------------------------------------- 06/27/17 20:44:16
terrance@terrance-ubuntu:~/testdir$ ls
20161203_202646.jpg       20170610_110407-PANO.jpg~
20161203_202646.jpg~      20170610_110407-PANO.jpg~1
20161203_202646.jpg~1     98percenteffective.jpg
20161225_150835.jpg       98percenteffective.jpg~
20161225_150835.jpg~      98percenteffective.jpg~1
20161225_150835.jpg~1     Home_Is_dog_hair.jpg
20170204_192943.jpg       Home_Is_dog_hair.jpg~
20170204_192943.jpg~      Home_Is_dog_hair.jpg~1
20170204_192943.jpg~1     images.jpg
20170204_193007.jpg       images.jpg~
20170204_193007.jpg~      images.jpg~1
20170204_193007.jpg~1     img_7230.jpg
20170204_193309.jpg       img_7230.jpg~
20170204_193309.jpg~      img_7230.jpg~1
20170204_193309.jpg~1     newfiles.zip
20170204_194206.jpg       ps_2013_12_29___11_47_19_fixed.jpg
20170204_194206.jpg~      ps_2013_12_29___11_47_19_fixed.jpg~
20170204_194206.jpg~1     ps_2013_12_29___11_47_19_fixed.jpg~1
20170322_230834.jpg       ps_2013_12_29___11_47_19.jpg
20170322_230834.jpg~      ps_2013_12_29___11_47_19.jpg~
20170322_230834.jpg~1     ps_2013_12_29___11_47_19.jpg~1
20170401_200805.jpg       unnamed.jpg
20170401_200805.jpg~      unnamed.jpg~
20170401_200805.jpg~1     unnamed.jpg~1
20170610_110407-PANO.jpg

Hope this helps!

4
  • 1
    It is weird that -B switch is not included in unzip --help.
    – LoMaPh
    Apr 15, 2019 at 22:15
  • Worked like a charm! In my use case, I have a bunch of log archive files, the -B switch is perfect for unzipping all those archive into a single folder, the I'll be able to do grep on those logs.
    – maximus
    Jan 20, 2021 at 7:30
  • I don't really like this naming convention as the extension gets modified Oct 7, 2022 at 12:18
  • Renaming files in a folder to sequential numbers - may need after this operation stackoverflow.com/a/44977159/10018427 Nov 16, 2022 at 7:31

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .