У вас уже есть нужный цикл. Проблема в том, что шар не расширяется.
#!/bin/bash
base_dir="Main_folder/*/Inbox"
target_dir="$2"
find $base_dir -type f -name "*.txt" | while IFS= read -r file; do
read -r year month day < <(date -d "$(stat -c %z "$file")" '+%Y %m %d')
mkdir -p "$target_dir/$year/$month/$day"
mv --backup=t "$file" "$target_dir/$year/$month/$day"
# enter code here
done
Используйте переменные в нижнем или смешанном регистре, чтобы избежать возможных конфликтов имен с переменными оболочки или среды.
Это один из случаев, когда переменная не должна заключаться в кавычки. В противном случае шар не будет расширен. Напротив, обратите внимание, что глобус в аргументе -name
обрабатывается find
, а не оболочкой, и почти всегда должен заключаться в кавычки.
Прочитайте дату из файла один раз, затем проанализируйте его для его компонентов. Это быстрее и эффективнее, и в тех случаях, когда это имеет значение, оно позволяет избежать проблем, возникающих в течение полуночи, и может помочь в других случаях (но обратите внимание, что могут быть проблемы с неатомарными операциями).
Создайте каталог назначения с помощью mkdir -p
- это безопасно, если он уже существует, и необходимо, если его нет.