删除所有文件的程序接受文件夹中的txt文件

时间:2014-04-13 11:15:04

标签: bash unix

采取2个论点,来源&目的地并删除除txt之外的所有文件。 。我只是学习bash,所以没有使用/意识到不同的功能等...

mkdir $2
cp -R $1/* $2

for file in $1/*;do #all files in testInput
   if [ -d "$file" ] #if its a file then look at the contents of it
   then
      for inDir in $file/*; do
         if [ -d "$inDir" ]
         then
            for line in $inDir ; do
               if [ line != *.txt ]
               then
                  rm line

               fi
            done
          fi
       done

    else
       for files in file; do
          if [ files != *.txt ]
          then
             rm files
          fi
       done

    fi     
done

source是一个包含3个文件夹的文件夹,其中一些子文件夹包含一个子文件夹和文件

2 个答案:

答案 0 :(得分:1)

获取目录$ 1中除* .txt文件以外的所有文件,并将它们移动到目录$ 2。

find "$1" -type f ! -name "*.txt" -exec mv -v "{}" "$2" \;

一如既往,小心这一点......

编辑围绕变量添加引号

edit2 引用文件名占位符,将调试输出添加到mv

答案 1 :(得分:1)

您应该使用find来执行此类任务。这是一个例子:

find "$dir" -type f ! -name "*.txt" -exec rm {} \;

否则:

if [ line != *.txt ]
# ...
if [ files != *.txt ]

您在变量名称之前缺少$并且测试不正确。你可以尝试这样的事情:

[[ $line =~ \.txt$ ]] || rm line

此外:

for files in file; do

您在变量名称前缺少字符$,您应该使用类似的内容:

for files in "$file"/*; do

最后,您无法正确保护变量。阅读:bash : Illegal number