Переместить и скопировать текстовый файл в скрипте bash - PullRequest
0 голосов
/ 05 февраля 2019

Я сослался на все предыдущие ответы на этот вопрос из stackoverflow и попробовал следующее.Но, к сожалению, я все еще сталкиваюсь с проблемой.

У меня есть текстовый файл с именем Rels_obs в моем каталоге home/manuela/PycharmProjects/knowledgegraphidentification/data.При запуске сценария он извлекает сжатую папку kgis.tar.gz и извлекает ее следующим образом.

#!/bin/bash

readonly DATA_URL='https://linqs-data.soe.ucsc.edu/public/psl-examples-data/kgi.tar.gz'
readonly DATA_FILE='kgis.tar.gz'
readonly DATA_DIR='kgi'

function main() {
   trap exit SIGINT

   check_requirements

   fetch_file "${DATA_URL}" "${DATA_FILE}" 'data'
   extract_tar "${DATA_FILE}" "${DATA_DIR}" 'data'
}

Результатом извлечения являются два каталога в каталоге данных, найденном по адресу home/manuela/PycharmProjects/knowledgegraphidentification/data:

  • eval каталог: home/manuela/PycharmProjects/knowledgegraphidentification/data/kgi/eval
  • Learn каталог: home/manuela/PycharmProjects/knowledgegraphidentification/data/kgi/learn

Я хочу скопировать мой файл Rels_obs в обе эти новые доступные директории, eval и learn.

Я попытался выполнитьниже, но это привело к ошибке, как показано ниже.

#!/bin/bash

readonly DATA_URL='https://linqs-data.soe.ucsc.edu/public/psl-examples-data/kgi.tar.gz'
readonly DATA_FILE='kgis.tar.gz'
readonly DATA_DIR='kgi'

function main() {
   trap exit SIGINT

   check_requirements

   fetch_file "${DATA_URL}" "${DATA_FILE}" 'data'
   extract_tar "${DATA_FILE}" "${DATA_DIR}" 'data'

   echo "COPYING"

   //I have only one file that is of plain text format within the data directory

   for file in ~/PycharmProjects/knowledgegraphidentification/data/*.txt
    do  
        name="$(basename "$file" .txt)"
        cp "$file" "~/PycharmProjects/knowledgegraphidentification/data/kgi/eval"
        cp "$file" "~/PycharmProjects/knowledgegraphidentification/data/kgi/learn"
    done
    echo "SUCCESSFULLY COPIED FILES"
}

Ошибка

КОПИРОВАНИЕ cp: not stat '/ home / manuelanayantarajeyaraj / PycharmProjects / Knowledgegraphidentification/data/.txt ': Нет такого файла или каталога cp: not stat' /home/manuelanayantarajeyaraj/PycharmProjects/knowledgegraphidentification/data/.txt ': Нет такого файла или каталога

ls -l в каталоге данных

total 20524
-rwxr-xr-x 1 manuelanayantarajeyaraj manuelanayantarajeyaraj     2210 
Feb  5 15:19 fetchData.sh
drwxrwxr-x 4 manuelanayantarajeyaraj manuelanayantarajeyaraj     4096 
Nov 19  2017 kgi
-rw-rw-r-- 1 manuelanayantarajeyaraj manuelanayantarajeyaraj 18546351 
Feb  5 15:21 kgis.tar.gz
-rw-rw-r-- 1 manuelanayantarajeyaraj manuelanayantarajeyaraj  2459319 
Feb  5 13:31 Rels_obs

Любые предложения на этот счет будут высоко оценены.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Нет такого файла или каталога, который виден из имени файла: / home / manuelanayantarajeyaraj / PycharmProjects / Knowledgegraphidentification / data / .txt Он не анализирует звездочку в цикле for.

В качестве оперативного исправления вы можете использовать:

SRC_DIR="~/PycharmProjects/knowledgegraphidentification/data/"
for file in $(ls -1 ${SRC_DIR}/*.txt); do  
    cp "$file" "${SRC_DIR}/kgi/eval"
    cp "$file" "${SRC_DIR}/kgi/learn"
done
echo "SUCCESSFULLY COPIED FILES"

Или вы можете просто скопировать его двумя командами:

SRC_DIR="~/PycharmProjects/knowledgegraphidentification/data/"
cp ${SRC_DIR}/*.txt ${SRC_DIR}/kgi/eval/
cp ${SRC_DIR}/*.txt ${SRC_DIR}/kgi/learn/
0 голосов
/ 05 февраля 2019

Вы упоминаете текстовый файл с именем Rels_obs, но называется ли он так или он называется Rels_obs.txt?Linux (текстовые) файлы не нуждаются в расширении как таковом, расширения предназначены исключительно для удобства пользователя.Поэтому, если файл не имеет расширения, этот скрипт не найдет его, так как ищет расширение.

Если вы уверены, что этот файл всегда будет иметь одинаковое имя, и вам нужен только этот файл, Я бы просто использовал имя.

т.е..

cp "~/PycharmProjects/knowledgegraphidentification/data/Rels_obs" "~/PycharmProjects/knowledgegraphidentification/data/kgi/eval"
cp "~/PycharmProjects/knowledgegraphidentification/data/Rels_obs" "~/PycharmProjects/knowledgegraphidentification/data/kgi/learn"

Если вы действительно хотите, чтобы все текстовые файлы в этом каталоге, вы могли бы сделать это:

for file in ~/PycharmProjects/knowledgegraphidentification/data/*
    do
        test "`file $file`" =~ "ASCII text" || continue
        cp "$file" "~/PycharmProjects/knowledgegraphidentification/data/kgi/eval"
        cp "$file" "~/PycharmProjects/knowledgegraphidentification/data/kgi/learn"
    done

Или вы можете переименовать файл, чтобы сначала добавить расширение .txt.

...