Почему выходные файлы записываются в другое место?

Вопрос или проблема

В каталоге “Загрузки” у меня есть две папки v1 и v2. Вывод следующего сценария помещается в v1 вместо “Загрузки”. Почему? Я запускаю сценарий из каталога “Загрузки”.

#!/usr/bin/env bash

# Полный путь к v1 
v1='/mnt/c/Users/myusername/Downloads/v1'

# Полный путь к v2 
v2='/mnt/c/Users/myusername/Downloads/v2'

# Проходим по файлам в v1 и сравниваем с v2
for file in "$v1"/*
do
  if [ -f "$file" ]; then
    fileInv2=$(find "$v2" -type f -iname "$(basename "$file")")
    if [ -f "$fileInv2" ]; then
      sort "$file" "$fileInv2" | uniq -u > "${file}_Diff_Output.txt"
    fi
  fi
done

Q2) Возможно ли создать папку с именем “…../Downloads/output” и перенаправить файлы вывода в папку output. Четыре точки означают, что начальный путь может быть любым. Поскольку я запускаю сценарий из папки “Загрузки”, я хочу, чтобы файлы вывода попадали в “…../Downloads/output”

Файл вывода записывается в папку v1 потому что вы указываете вывод как

> "${file}_Diff_Output.txt"

и ${file} — это полный путь к входному файлу, который находится в v1 (из for file in "$v1"/*).

Вы можете указать файл вывода в другой папке с помощью конструкции, как

> "...../Downloads/output/$(basename "$file")_Diff_Output.txt"

Возможно, вы захотите присвоить $(basename "$file") другой переменной для ясности и простоты.

Ответ или решение

Почему выходные файлы записываются в другое место?

При выполнении вашего сценария Bash выходные файлы генерируются в каталоге v1 из-за специфики, с которой вы задаете путь для вывода. Рассмотрим основные моменты, которые влияют на данный процесс:

  1. Контекст выполнения: Сценарий запускается из каталога Downloads, но путь для вывода файлов относительно переменной file указывает на текущий файл внутри каталога v1. Вы используете конструкцию:

    > "${file}_Diff_Output.txt"

    Здесь ${file} представляет собой полный путь к файлу в каталоге v1, что означает, что выходной файл будет записан в том же каталоге, что и входной.

  2. Отсутствие явного указания пути: Вы не определяете явный путь для выходных файлов. По умолчанию, если вы не укажете полный путь, файл будет создан в том каталоге, в котором находится исполняемый файл или база пути переменной.

Как перенаправить выходные файлы в другой каталог?

Для того чтобы перенаправить выходные файлы в каталог output, который вы хотите создать внутри каталога Downloads, вам необходимо внести следующие изменения в код:

  1. Создание каталога output: Перед тем как выполнять ваши операции с файлами, убедитесь, что каталог output существует. Вы можете это сделать с помощью команды mkdir, добавив это в ваш сценарий:

    mkdir -p "${v1}/../output"

    Это создаст каталог output в каталоге Downloads, если он еще не был создан.

  2. Изменение пути для выходных файлов: Теперь вам нужно изменить строку, где определяются выходные файлы:

    sort "$file" "$fileInv2" | uniq -u > "${v1}/../output/$(basename "$file")_Diff_Output.txt"

    Здесь ${v1}/../output указывает на каталог output, предполагаемый как подкаталог в Downloads, а $(basename "$file") получает имя файла без пути, что делает его понятным для сохранения в новом каталоге.

Итог

Эти изменения позволят вашему сценарию создавать выходные файлы в нужном каталоге output, сохраняя ясность и читабельность кода. Помните, что всегда важно явно указывать пути для выходных файлов, чтобы избежать путаницы с размещением данных.

SEO Оптимизация

Это описание отвечает не только на ваш вопрос, но и включает в себя ключевые слова, такие как "выходные файлы", "каталог вывода", "Bash сценарий", и "перенаправление файлов", что может помочь в SEO-продвижении на платформах, связанных с программированием и скриптами.

Оцените материал
Добавить комментарий

Капча загружается...