2016-03-07 2 views
0

У меня есть куча подкаталогов с несколькими тысячами PNG-файлов, которые будут отправляться через Photoshop, создавая файлы PSD. Photoshop может выводить их только в одну папку, и я хочу переместить их обратно в исходный каталог - так что новый файл foo_bar_0005.psd должен идти туда, где foo_bar_0005.png уже есть. Каждое имя файла существует только один раз.bash: перемещение файлов в исходный каталог на основе имени файла?

Может ли кто-нибудь помочь мне с этим? Я на OSX.

+0

Вы должны добавить более подробную информацию о том, что вы пробовали и какой код вы сделали. SO не является сервисом написания кода, но мы будем рады помочь. В то же время вы, скорее всего, захотите изучить 'find' и' mv', поскольку их объединение в скрипт может дать вам то, что вы хотите. – zzevannn

ответ

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 

Но обратите внимание, что этот сценарий не содержит каких-либо обработчиков ошибок, например, проблема с файлом, проблема с файлом не найдена и т. д.

+1

большое спасибо! \ О / – 7dude

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.

Смежные вопросы