簡體   English   中英

在bash腳本中移動和復制文本文件

[英]Move and copy text file in bash script

我從stackoverflow中提到了對此問題的所有先前響應,並嘗試了以下內容。 但不幸的是,我仍然遇到了一個問題。

我在我的目錄home/manuela/PycharmProjects/knowledgegraphidentification/data有一個名為Rels_obs的文本文件。 當腳本運行時,它會提取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
  • 學習目錄: home/manuela/PycharmProjects/knowledgegraphidentification/data/kgi/learn

我想要做的是將我的Rels_obs文件復制到這兩個新的目錄, evallearn

我嘗試執行以下操作但導致錯誤,如下所示。

#!/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"
}

錯誤

COPYING cp:無法統計'/ home / manuelanayantarajeyaraj / PycharmProjects / knowledgegraphidentification / data / .txt':沒有這樣的文件或目錄cp:不能統計'/ 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

任何有關這方面的建議都將受到高度贊賞。

你提到了一個名為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擴展名。

它沒有說明文件名中可見的文件或目錄: /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/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM