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

问题描述 投票:2回答:2

我提到的所有以往的回应,从计算器这个问题,并尝试了以下内容。但不幸的是,我仍然遇到问题。

我有一个名为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
  • 学习目录: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:不能STAT“/home/manuelanayantarajeyaraj/PycharmProjects/knowledgegraphidentification/data/.txt”:没有这样的文件或目录CP:不能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
2个回答
0
投票

它说没有这样的文件或目录,这是从文件名中可见:/home/manuelanayantarajeyaraj/PycharmProjects/knowledgegraphidentification/data/.txt它不会在解析星号的循环。

作为一个热修复程序,您可以使用:

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
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.