gpt4 book ai didi

linux - 在 Linux 上从多个文件中删除冒号

转载 作者:太空宇宙 更新时间:2023-11-04 08:58:34 24 4
gpt4 key购买 nike

我正在尝试获取一些目录并将它们从 Linux 转移到 Windows。问题是 Linux 上的文件中有冒号。我需要将这些目录(我不能直接更改它们,因为它们是服务器,因此需要它们)复制到具有 Windows 可以使用的名称的文件中。例如,服务器上目录的名称可能是:

IAPLTR2b-ERVK-LTR_chr9:113137544-113137860_-

当我需要它时:

IAPLTR2b-ERVK-LTR_chr9-113137544-113137860_-

我有大约 60 个这样的目录,我收集了文件的名称及其绝对路径,并将其保存在一个名为 directories.txt 的文件中。我需要遍历此文件,将冒号更改为连字符。到目前为止,我的尝试是这样的:

#!/bin/bash

$DIRECTORIES=`cat directories.txt`
for $i in $DIRECTORIES;
do
cp -r "$DIRECTORIES" "`echo $DIRECTORIES | sed 's/:/-/'`"
done

但是我得到了错误:

./my_shellscript.sh: 第 10 行:=/bigpartition1/JKim_Test/test_bs_1/129c-test-biq/IAPLTR1_Mm-ERVK-LTR_chr10:104272652-104273004_+.fasta: 没有这样的文件或目录./my_shellscript.sh:第 14 行:`$i':不是有效的标识符

这里有人可以帮助我确定我做错了什么以及我可能需要做什么吗?

提前致谢。

最佳答案

这个怪物会在原地重命名目录:

find tmp -depth -type d -exec sh -c '[ -d "{}" ] && echo mv "{}" "$(echo "{}" | tr : _)"' \;

我使用 -depth 所以它首先下降到最深的子目录。
[ -d "{}"] 是必需的,因为一旦重命名子目录,其父目录(由 find 找到)可能不再存在(已重命名)。

如果您满意,将“echo mv”更改为“mv”,它会执行您想要的操作。

关于linux - 在 Linux 上从多个文件中删除冒号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26088937/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com