[英]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
找到的数据目录中有两个目录:
home/manuela/PycharmProjects/knowledgegraphidentification/data/kgi/eval
home/manuela/PycharmProjects/knowledgegraphidentification/data/kgi/learn
我想要做的是将我的Rels_obs
文件复制到这两个新的目录, eval
和learn
。
我尝试执行以下操作但导致错误,如下所示。
#!/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.