【问题标题】:Move and copy text file in bash script在 bash 脚本中移动和复制文本文件
【发布时间】:2019-02-05 08:56:47
【问题描述】:

我参考了 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 找到的数据目录中的两个目录中提取结果:

  • 评估目录: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"
}

错误

复制 cp: 无法统计 '/home/manuelanayantarajeyaraj/PycharmProjects/knowledgegraphidentification/data/.txt': 没有这样的文件或目录 cp: cannot 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

在这方面的任何建议都将受到高度赞赏。

【问题讨论】:

    标签: linux bash directory copy move


    【解决方案1】:

    它说没有这样的文件或目录,从文件名中可以​​看出: /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/
    

    【讨论】:

    • 您好米兰,感谢您的回复。我试过了,但没有用。我得到了同样的错误。我认为错误是因为@jvdmr 提到的扩展名。所以我尝试将文件重命名为Rels_obs.txt,并将您的建议修改为cp ${SRC_DIR}/Rels_obs.txt ${SRC_DIR}/kgi/eval/。但这返回了与 "cp: cannot stat '~/PycharmProjects/knowledgegraphidentification/data//Rels_obs.txt': No such file or directory" 相同的错误
    【解决方案2】:

    您提到了一个名为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 扩展名。

    【讨论】:

    • 在这种情况下,我该如何复制这个文件?它在其属性中表示该文件是“纯文本文档”格式。
    • 我已经编辑了我的答案来回答这个问题,因为太长了,无法发表评论回复。
    • 我刚刚看到你对@milan-dufek 的回答的回复;你能发布ls -l ~/PycharmProjects/knowledgegraphidentification/data//Rels_obs.txt ; file ~/PycharmProjects/knowledgegraphidentification/data//Rels_obs.txt 的输出吗? (或者如果您已将其重命名,则不带 .txt 扩展名)
    • 我在回复@Milan-dufek 时重命名了它。但现在我只是有 Rels_obs 并尝试了你的第一个建议。但我似乎得到了cp: cannot stat 'home/manuelanayantarajeyaraj/PycharmProjects/knowledgegraphidentification/data/Rels_obs': No such file or directory。我已经用 ls -l 输出更新了我的问题。
    • 我注意到这次你的错误路径的开头没有 /。那可能会导致问题吗?是否正确复制和粘贴所有内容、“~”字符和所有内容?
    猜你喜欢
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 2012-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多