我正在尝试获取一些目录并将它们从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':不是有效的标识符
这里的任何人都可以帮我确定我做错了什么,也许我需要做什么?
提前致谢。
答案 0 :(得分:3)
这个怪物将原位重命名目录:
find tmp -depth -type d -exec sh -c '[ -d "{}" ] && echo mv "{}" "$(echo "{}" | tr : _)"' \;
我使用-depth
因此它首先下降到最深的子目录
[ -d "{}" ]
是必需的,因为只要重命名子目录,其父目录(由find找到)可能不再存在(已重命名)。
如果您对“mv”感到满意,可以将“echo mv”更改为“mv”。