Я должен изменить свою структуру каталогов для моих фотографий от/YEAR/MONTH/DAY/до/YEAR-MONTH-DAY
Я знаю, что это может отсортировать быть, покончили exiftool
, но это будет только работать над файлами, содержащими EXIF-теги, и у меня есть файлы xmp-расширения-за-счет-внешних-устройств, соответствующие каждому изображению, и они должны прийти также. Таким образом, я повторно подставляю сценарий некоторого вида, был бы лучший способ.
Я сел и попытался изучить RegEx, sed
, удар и что не, и, учитывая достаточное количество времени, я предполагаю, что должен смочь понять этого, но прямо сейчас я спешу, таким образом, любая справка ценилась бы.
//Ola
rename
утилита в Ubuntu может переименовать структуры каталогов, но она не вымоется после себя.
rename 's#(.+)/(.+)/(.+)#$1-$2-$3#' */*/*/
Палка -vn
на конце, если Вы просто хотите, чтобы это сказало Вам, что это собирается сделать, прежде чем это переименует что-либо, но здесь будет небольшой тестовой обвязкой, которая показывает Вам, что возможно:
$ mkdir -p 2014/06/15
$ touch 2014/06/15/photo_{001..003}.jpg
$ tree
.
└── 2014
└── 06
└── 15
├── photo_001.jpg
├── photo_002.jpg
└── photo_003.jpg
$ rename 's#(.+)/(.+)/(.+)#$1-$2-$3#' */*/*/
$ tree
.
├── 2014
│ └── 06
└── 2014-06-15
├── photo_001.jpg
├── photo_002.jpg
└── photo_003.jpg
Просто помещенный это питается, дважды косвенные каталоги и переименование читают более ранние два сегмента и переименовывают его, засовывая его в текущий каталог. Поскольку Вы видите, что будет загрузка каталогов года. Принятие они пусты, Вы могли вымыться с чем-то как (и я молюсь проверить, что они пусты первый):
find -maxdepth 1 -type d -regex '\./[0-9][0-9][0-9][0-9]' -exec rm -irf "{}" \;
Я использую-i опцию вынудить это спросить Вас прежде, чем удалить каждый файл. Удалите это на Ваш собственный риск.
cd base
# the trailing slash in the pattern limits the results to directories, not files
for subdir in */*/*/; do
# $subdir is now "year/mon/day/"
subdir=${subdir%/} # remove the trailing slash
newdir=${subdir//\//-} # replace all slashes with hyphens
mkdir "$newdir"
mv "$subdir"/* "$newdir"
done
Попробуйте это:
TOP=$PWD
for y in *; do
if cd $y; then
for m in *; do
if cd $m; then
for d in *; do
if cd $d; then
mv $d $TOP/$y-$m-$d -R
fi
done
cd .. && rmdir $m
fi
done
cd .. && rmdir $y
fi
done
$ fn="/media/drive/folder/2014/06/14/name.jpg" ; \ echo "mv $fn $(echo $fn | sed -re 's,([0-9]+)/,\1-,g')" mv /media/drive/folder/2014/06/14/name.jpg /media/drive/folder/2014-06-14-name.jpg
$ find -type f | tee LISTOFFILES.txt $ cat LISTOFFILES.txt | while read p ; do # loop through all files, one at a time f="${p##*/}" ; bn=${f%%\.*} ; op="${p%/*}/" ; echo -e "$f\n$bn\n$op" # $p - complete path to original file # $f - filename with extension # $bn - basename, filename without extension # $op - orignal PATH, filename and extensions stripped off # add your conversion here - based on the above # mkdir -p "$p" # probably required # mv "$p" "..." # done
Теперь при чтении вышеупомянутого ПОЛНОСТЬЮ, Вы найдете все остатки, необходимо выполнить эту задачу.
Поскольку я не могу сказать, как у Вас ЕСТЬ IT, ни КАК ВЫ ХОТИТЕ IT - я не могу закончить его для Вас.
http://www.tldp.org/guides.html
имеет ДВА руководства Bash, чтобы читать и просмотреть - делают попытку.
Я оставляю его здесь. Это не сервис, я сделал это из-за любопытства только.
И помните - там МОГУТ быть отказы, поскольку я не протестировал его полностью.
Можно представить отказы, о которых Вы не думали... :-)
Удачи! ;-) Вам нужен он.