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

时间:2014-09-28 19:46:40

标签: linux windows bash copying renaming

我正在尝试获取一些目录并将它们从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:line 10:= / bigpartition1 / JKim_Test / test_bs_1 / 129c-test-biq / IAPLTR1_Mm-ERVK-LTR_chr10:104272652-104273004 _ +。fasta:没有这样的文件或目录./my_shellscript.sh:第14行:`$ i':不是有效的标识符

这里的任何人都可以帮我确定我做错了什么,也许我需要做什么?

提前致谢。

1 个答案:

答案 0 :(得分:3)

这个怪物将原位重命名目录:

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

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

如果您对“mv”感到满意,可以将“echo mv”更改为“mv”。