簡體   English   中英

復制子文件夾,ZIP和RAR的所有文件,而不會覆蓋目標文件夾中具有相同名稱的文件

[英]Copy all files from subfolders, ZIP's and RAR's, without overwriting files with same name in destination folders

我想知道是否可以提取子文件夾,zip和rar中的文件,而不會覆蓋不同文件夾中具有相同名稱的文件。

示例文件夾:

TargetFolder
|
|
-- FolderOne
   |
   --- PDF.PDF
   --- ZIP.ZIP <- FileInsideZIP.docx
|
-- FolderTwo
   |
   --- PDF.PDF
   --- NestedFolder
       |
       --- SomeFile.txt
       --- OtherFile.xls

需求輸出:

FinalFolder
|--- PDF.PDF
|--- FileInsideZip.docx
|--- PDF (2).PDF
|--- SomeFile.txt
|--- OtherFile.xls

目前,我正在使用以下命令行:

find TargetFolder -type f -exec cp --backup=numbered \{\} FinalFolder \;

這很好,但不幸的是,此命令無法將文件保存在zip文件中,有時我在zip文件中也有zip文件,依此類推..所以,我需要一種更好的方法,因為當前我正在浪費時間。

謝謝。

這是一種方法(警告:未經測試):

backup_decompress_recursive () {
  # $1 is set to TargetFolder by usage backup_decompress_recursive "TargetFolder"
  # find and backup up all non-zip, non-rar files (based on @joao's code)
  find "$1" -type f -not -iname "*.zip" -and -not -iname "*.rar" -exec cp --backup=numbered "{}" FinalFolder \;

  # make and go into a temporary folder (for storing decompressed contents of zip and rar files)
  tmp=`mktemp -d`
  cd $tmp

  # now find all zip or rar and pipe names to a while loop
  find "$1" -type f -iname "*.zip" -or -iname "*.rar" |
    while read z; do
      # $z is one zip or rar

      # make a temp dir for its contents and go in
      mkdir "$z".d
      cd "$z".d

      # unzip or unrar depending on whether $z ends in ".zip" or ".rar"
      if [[ "$z" =~ \.zip$ ]]; then
        unzip "$z"
      elif
        unrar x "$z"
      fi
      cd ..
    done

  # do this whole process again, recursively, on $tmp
  # ($tmp contains all the inner tempdirs as well)
  # this handles file inside of rar inside of zip inside of zip inside of....
  backup_decompress_recursive $tmp

  # cleanup
  rm -rf $tmp
}

# ignore case to handle ".ZIP", ".ziP", etc...
shopt -s nocasematch
backup_decompress_recursive "TargetFolder"
# stop ignoring case
shopt -u nocasematch

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM