bash: 根据文件名将文件移动到原始目录?
bash: moving files to original directory based on filename?
我有一堆子目录,其中包含几千个 PNG 文件,这些文件将通过 Photoshop 发送,创建 PSD 文件。 Photoshop 只能将它们输出到一个文件夹中,我想将每个文件都移回它们的原始目录 - 所以新文件 foo_bar_0005.psd 应该转到 foo_bar_0005.png 已经存在的位置。每个文件名只存在一次。
有人可以帮我解决这个问题吗?我在 OSX.
使用此 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 "" && echo mv ${psd_dir}${n%.png}.psd ${1%/*}/; echo' \;
这里的回声是为了让您大致了解结果。
您应该删除它们以启动真正的 photoshop 命令。
您可以从这个最小的脚本开始:
#!/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$//g')"
png_dir="$(find $search_dir -name $file_name.png | grep -e '.*/' -o)"
mv $psd_file $png_dir
done
但请注意,此脚本不包含任何错误处理程序,例如文件冲突问题、文件未找到问题等
我有一堆子目录,其中包含几千个 PNG 文件,这些文件将通过 Photoshop 发送,创建 PSD 文件。 Photoshop 只能将它们输出到一个文件夹中,我想将每个文件都移回它们的原始目录 - 所以新文件 foo_bar_0005.psd 应该转到 foo_bar_0005.png 已经存在的位置。每个文件名只存在一次。
有人可以帮我解决这个问题吗?我在 OSX.
使用此 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 "" && echo mv ${psd_dir}${n%.png}.psd ${1%/*}/; echo' \;
这里的回声是为了让您大致了解结果。
您应该删除它们以启动真正的 photoshop 命令。
您可以从这个最小的脚本开始:
#!/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$//g')"
png_dir="$(find $search_dir -name $file_name.png | grep -e '.*/' -o)"
mv $psd_file $png_dir
done
但请注意,此脚本不包含任何错误处理程序,例如文件冲突问题、文件未找到问题等