bash: moving files to original directory based on filename?
我有很多子目录,其中有几千个PNG文件将通过Photoshop发送,创建PSD文件。photoshop只能将它们输出到一个文件夹中,我想将每个文件夹移回它们的原始目录,因此新文件foo_bar_0005.psd应该转到foo_bar_0005.png已经存在的位置。每个文件名只存在一次。
有人能帮我吗?我在OSX上。
您可以从这个最小的脚本开始:
1 2 3 4 5 6 7 8 9 10 | #!/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 |
但请注意,此脚本不包含任何错误处理程序,例如文件冲突问题、文件未找到问题等。
用这个
1 2 3 4 | 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' \; |
这里的echo是为了给您一个结果的概述。
您应该删除它们以启动真正的photoshop命令。