bash:根据文件名将文件移动到原始目录?

时间:2016-03-07 15:54:09

标签: bash subdirectory

我有一堆子目录,有几千个PNG文件,将通过Photoshop发送,创建PSD文件。 Photoshop只能将它们输出到一个文件夹,我想将每个文件夹移回原来的目录 - 所以新文件foo_bar_0005.psd应该转到foo_bar_0005.png已经存在的位置。每个文件名只存在一次。

有人可以帮我这个吗?我是OSX。

2 个答案:

答案 0 :(得分:0)

使用此find找到的每个文件都通过管道传递给Bash命令,该命令会连续进行psd转换并将.psd移动到.png原始目录。

psd_dir=/psd_dir/
export psd_dir

find . -type f -name '*.png' | xargs -L 1 bash -c 'n=${1##*/}; echo photoshop "$1" && echo mv ${psd_dir}${n%.png}.psd ${1%/*}/; echo' \;

回声在这里为您提供结果的概述。

您应该删除它们以启动真正的photoshop命令。

答案 1 :(得分:0)

您可以从这个最小的脚本开始:

#!/bin/bash

search_dir="search/png/from/this/directory/"
psd_dir="path/to/psd/directory/"

for psd_file in "$psd_dir"*.psd; do
    file_name="$(echo $psd_file | sed 's/.*\/\(.*\).psd$/\1/g')"
    png_dir="$(find $search_dir -name $file_name.png | grep -e '.*/' -o)"
    mv $psd_file $png_dir
done

但请注意,此脚本不包含任何错误处理程序,例如文件冲突问题,文件未找到问题等。