stevebanfield
stevebanfield

Reputation: 11

how to use applescript to move files to new folder by extension, keeping subfolder name

Here's what I'm trying to do.

I've got a file structure that contains photos in both JPG and RAW formats. It's a folder called "Photos" with subfolders by date. I'd like to copy just the RAW photos to a new folder, "Photos RAW", but keep the structure by date taken/created.

I can copy just the files using automator or applescript a directory to a new one, but how do I walk the directory tree using applescript so I cover all the subfolders?

Upvotes: 1

Views: 2048

Answers (1)

regulus6633
regulus6633

Reputation: 19030

Try this. You'll see I used "entire contents" to get the files in the subfolders too.

set extensionToFind to "raw"

set topLevelFolder to (choose folder) as text
set pathCount to count of topLevelFolder

tell application "Finder"
    -- get the files
    set rawFiles to files of entire contents of folder topLevelFolder whose name extension is extensionToFind
    if rawFiles is {} then return

    -- setup the folder where the files will be moved
    set rawFolder to ((container of folder topLevelFolder) as text) & "Photos_Raw:"
    do shell script "mkdir -p " & quoted form of POSIX path of rawFolder

    repeat with aFile in rawFiles
        set aFileContainer to (container of aFile) as text
        if topLevelFolder is equal to aFileContainer then
            -- here the file is at the top level folder
            set newPath to rawFolder
        else
            -- here we calculate the new path and make sure the folder structure is in place
            set thisFile to aFile as text
            set subFolderPath to text (pathCount + 1) thru -((count of (get name of aFile)) + 1) of thisFile
            set newPath to rawFolder & subFolderPath
            do shell script "mkdir -p " & quoted form of POSIX path of newPath
        end if

        move aFile to folder newPath
    end repeat
end tell

Upvotes: 1

Related Questions