在Bash脚本中移动和复制文本文件

3
我参考了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 directory : home/manuela/PycharmProjects/knowledgegraphidentification/data/kgi/eval
  • learn directory : 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

如果您在这方面有任何建议,我们将不胜感激。

2个回答

0
你提到了一个文本文件名为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 扩展名。


在这种情况下,我该如何复制这个文件呢?属性中显示该文件是“纯文本文档”格式。 - Nayantara Jeyaraj
我已编辑我的答案来回答这个问题,因为回复评论的长度太长了。 - jvdmr
我刚看到你对@milan-dufek的回复; 你能发布一下以下命令的输出吗? ls -l ~/PycharmProjects/knowledgegraphidentification/data//Rels_obs.txt ; file ~/PycharmProjects/knowledgegraphidentification/data//Rels_obs.txt?(如果你已经将其重命名,请不要包含.txt扩展名) - jvdmr
我在回复@Milan-dufek时将其重命名。但现在我只有Rels_obs,并尝试了您的第一个建议。但是我似乎得到了cp:无法统计'home / manuelanayantarajeyaraj / PycharmProjects / knowledgegraphidentification / data / Rels_obs':没有那个文件或目录。我已经更新了我的问题,附上了ls -l输出。 - Nayantara Jeyaraj
我注意到这次错误中路径开头没有 / ,这会导致问题吗?所有内容都复制粘贴正确了吗,包括 '~' 字符? - jvdmr
从我的角度来看,我已经尝试了各种不同的修改方式。因此,目前我正在尝试一种不同的方法,将文件传输到而不是复制。我会检查它是否有效并回复你。但是非常感谢你的指导。 - Nayantara Jeyaraj

0

它显示没有此文件或目录,这可以从文件名看出: /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:无法查找‘~/PycharmProjects/knowledgegraphidentification/data//Rels_obs.txt’文件或目录”相同的错误。 - Nayantara Jeyaraj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接