Как получить путь к файлу из нескольких папок и определенных подпапок? - PullRequest
0 голосов
/ 11 июля 2019

(Unix)

У меня есть файлы в каталогах и подкаталогах, которые мне нужно переместить в каталог хранения.Структура папок:

Main_folder: Folder1 > Inbox > File1
                 > Outbox
         Folder2 > Inbox > File2
                 > Outbox
         Folder3 > Inbox > File3
                 > Outbox
         ....

Мне нужно перемещать файлы только из папки «Входящие».Должен ли я сделать цикл?Если да, то как мне добавить цикл в существующий скрипт?

Спасибо.

В настоящее время у меня есть BASE_DIR = "Main_folder / * / Inbox", но он не проходит через остальные папки?

#!/bin/bash

BASE_DIR="Main_folder/*/Inbox"

TARGET_DIR="$2"



find "$BASE_DIR" -type f -name "*.txt" | while IFS= read -r file; do

year="$(date -d "$(stat -c %z "$file")" +%Y)"

month="$(date -d "$(stat -c %z "$file")" +%m)"

day="$(date -d "$(stat -c %z "$file")" +%d)"



mv --backup=t "$file" "$TARGET_DIR/$year/$month/$day"



enter code here

done

1 Ответ

1 голос
/ 12 июля 2019

У вас уже есть нужный цикл. Проблема в том, что шар не расширяется.

#!/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 - это безопасно, если он уже существует, и необходимо, если его нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...