Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 复制文件夹结构并合并子目录_Bash_Applescript_Directory_Automator_Robocopy - Fatal编程技术网

Bash 复制文件夹结构并合并子目录

Bash 复制文件夹结构并合并子目录,bash,applescript,directory,automator,robocopy,Bash,Applescript,Directory,Automator,Robocopy,我不确定在哪里发布这篇文章最合适,希望有人能提出建议,如果这是不正确的,我是一个很长时间的浏览器,但这是我的第一篇文章。无论如何 我需要自动将文件夹复制到新位置并合并子目录 我将使用ABC作为示例文本字符串,它表示公司名称,是一个常量值 目前的结构如下: 2012年工作 ABC12 001-099 ABC12-001 jpgs 生的 网 争吵 ABC12-002 ABC12-003 ABC12 100-199 ABC12200-299 2013年工作 2014年工作

我不确定在哪里发布这篇文章最合适,希望有人能提出建议,如果这是不正确的,我是一个很长时间的浏览器,但这是我的第一篇文章。无论如何

我需要自动将文件夹复制到新位置并合并子目录

我将使用ABC作为示例文本字符串,它表示公司名称,是一个常量值

目前的结构如下:

  • 2012年工作

    • ABC12 001-099
      • ABC12-001
        • jpgs
        • 生的
        • 争吵
      • ABC12-002
      • ABC12-003
    • ABC12 100-199
    • ABC12200-299
  • 2013年工作

  • 2014年工作
我需要做的是将此结构复制到一个新位置,但将jpgs和web文件夹合并到一个名为jpgs的文件夹中,将raw和TIFF合并到另一个名为TIFF的文件夹中

我创建了一个AppleScript来创建文件夹结构,但是这些显然都是空白文件夹,复制已经存在的内容并重新开始会容易得多,接受任何建议,你就是专家!谢谢

图中显示了之前的结构以及之后我希望的结构:
下面的脚本部分满足了您的需要(我想!)

它会查找您选择的顶部文件夹中的每个“原始”文件夹(即包含所有“2012作业”、“2013作业”和…)

对于找到的每个“原始”文件夹,它会查看是否在同一级别已经存在一个“TIFF”文件夹(如果不存在,则创建它)

然后将所有文件从“raw”移动到“tiff”,最后删除空的“raw”

若要完成,您必须再次执行相同的操作,但要将“web”文件夹复制到“jpgs”中。您有两种方法:

1) 将“tell Finder”块移动到带有2个字符串参数(raw、TIFF)的子程序中,调整脚本以用参数替换每次出现的raw/TIFF。然后用(“raw”、“TIFF”)调用此例程,再次用(“web”、“jpgs”)调用此例程

2) 您只需复制/粘贴tell finder块并手动将“原始”/“TIFF”更改为“web”/“jpgs”

由你决定


警告:不要忘记在父文件夹的完整副本上运行此操作!

cp-r
?或rsync(如果是重复作业)我认为这对手动创建文件夹很有效,但我希望它遍历每个文件夹并复制到新位置,然后在最低级别合并文件夹,如果可以使用cp命令完成,请在回答上展开?
set TopFolder to choose folder with prompt "Select parent folder to process"

tell application "Finder"
set RawsFolder to every folder of entire contents of TopFolder whose (name is "raw")
repeat with aFolder in RawsFolder
    set ParentFolder to container of aFolder -- get upper folder
    set TiffFolder to (ParentFolder as string) & "tiffs"
    if not (exists TiffFolder) then make new folder in ParentFolder with properties {name:"tiffs"}
    set FilesRaw to every file of aFolder --get all files from raw folder
    move FilesRaw to folder TiffFolder -- move them to tiffs folder
    delete aFolder -- delete the raw folder
end repeat
end tell