2013-10-08 9 views
1
#!/bin/bash 

# When a match is not found, just present nothing. 
shopt -s nullglob 

files=(*.wav) 

if [[ ${#files[@]} -eq 0 ]]; then 
echo "No match found." 
fi 

for file in "${files[@]}"; do 
# We get the date part 
find_date=$(stat -c %y $file | awk '{print $1}')` 
for t in "${parts[@]}"; do 
IFS="-." read -ra parts <<< "$file" 
    if [[ $t == [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9] ]]; then 
     file_date=$t 
     break 
    fi 
done 
# If a value was not assigned, then show an error message and continue to the next  file. 
# Just making sure there is nothing in Array and date before it moves on 
if [[ -z $file_date ]]; then 

    continue 
fi 

file_year=${file_date:0:4} 
file_month=${file_date:6:2} 
mkdir -p "$file_year/$file_month" 

# -- is just there to not interpret filenames starting with - as options. 

echo "Moving: ./"$file "to: " "./"$file_year"/"$file_month 
mv "$file" "$file_year/$file_month" 

done 

У меня есть файлы, которые являются .wav .... Я хочу поместить файлы в массив, как я, а затем Stat -c% y filename | awk $ 1, который дает мне YYYY- MM-DD, а затем я хочу поместить дату в массив, чтобы затем установить 2 переменные Год и Месяц, чтобы затем я мог сделать DIR Year/Month или если DIR уже есть, то просто mv. который является mkdir -p ... Geting ошибки в моем коде, но я не думаю, что я читаю файл в моем массиве правильно.Ошибка в моем коде

25: продолжаются: смысл только в for', время «или 'до» цикла мое эхо заявление Moving: ./OUT117-20092025-5845.wav к: .//

ответ

0

Кроме того, некоторые вопросы синтаксиса основных проблема в том, что вы не можете использовать continue снаружи для цикла.

Ошибка синтаксиса являются:

  • Вы не можете иметь пространство по обе стороны от оператора присваивания = так find_date= stat -c %y $file | awk {печать $ 1} ` should be find_date = $ (стат -c% г $ Файл | AWK «{печать $ 1} «)`
  • оператор Regex является =~ вместо ==

UPDATE: вы начинаете свой цикл, прежде чем вы устанавливаете лет переменная ur.

for t in "${parts[@]}"; do 
IFS="-." read -ra parts <<< "$file" 

Оно должно быть:

IFS="-." read -ra parts <<< "$file" 
for t in "${parts[@]}"; do 
+0

что бы некоторые вопросы синтаксиса .. Я новичок в этом –

+0

Пожалуйста, проверьте отредактированный ответ. – anubhava

+0

./awktest.sh: строка 14: неожиданный EOF при поиске соответствия '' ' ./awktest.sh: строка 39: синтаксическая ошибка: неожиданный конец файла. Теперь я редактирую код выше и запускал его –

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