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

时间:2019-02-05 08:56:48

标签: linux bash directory copy move

我参考了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的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:无法统计'/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 :(得分: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扩展名。

答案 1 :(得分: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/