-1
for i in *.txt
do 
    #Text files 
    echo  $i
    #checking for existing files
    if [ -f ~/txt/$i ] 
    then 
        j=1
        #Stripping .txt from the files
        temp=${i%".txt"}
        #appending filaname with counter "($j)"
        i=$temp\($j\).txt
        #move to folder /txt
        mv $i ~/txt
    else
        mv $i ~/txt
    fi
done

我的循环检查现有文件的文件夹,如果该文件名存在,则附加文件名(例如(1),(2)等。一旦文件名被重命名并保存在$i我尝试 mv 它但是我越来越: mv: cannot stat 'list(1).txt': No such file or directory

我试过了mv {$i} ~/txtmv [$i] ~/txt等等......没有运气。有任何想法吗?

4

2 回答 2

1

你说:

一旦文件被重命名并保存在$i...

但这是错误的 - 此时文件尚未重命名。您操纵了变量中的一些文本。在您运行命令之前,这对文件系统没有任何影响,例如通过使用mv.

另外,在您的else陈述中,我不清楚您为什么mv在不存在的文件上运行(-f测试失败)。

我在这里有一些代码,但是再次阅读您的程序后,我不确定您到底要完成什么,确切地...

于 2013-09-24T22:27:41.843 回答
1

您在此处覆盖文件的实际名称:

  i=$temp\($j\).txt

相反,使用新变量作为新名称。像这样的东西。

  newname=$tmp\($j\).txt
  #move to folder /txt
  mv $i ~/txt/$newname
于 2013-09-24T22:29:56.923 回答