Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将文件移动到同一目录中具有旧扩展名的文件_Linux_Bash_Shell - Fatal编程技术网

Linux 将文件移动到同一目录中具有旧扩展名的文件

Linux 将文件移动到同一目录中具有旧扩展名的文件,linux,bash,shell,Linux,Bash,Shell,我有一个问题,在错误之后,我得到了一个作业,因为它似乎在我自己的测试工作。我将在下面发布脚本和错误。 Bash脚本 #!/bin/bash for file in $1 do $file | grep \.old$ > /dev/null if [ "$file" != 0 ] then mv $file $file.old else $file fi done Files created in 'testdir: file1 file2.old file3old file4.

我有一个问题,在错误之后,我得到了一个作业,因为它似乎在我自己的测试工作。我将在下面发布脚本和错误。 Bash脚本

#!/bin/bash
for file in $1
do $file | grep \.old$ > /dev/null
 if [ "$file" != 0 ]
then mv $file $file.old
else $file
fi
done

Files created in 'testdir:

file1  file2.old  file3old  file4.old

Execution of 'oldfiles testdir':


'oldfiles testdir' incorrectly produced some output or errors:
for file in $1
  do $file | grep \.old$ > /dev/null
  if [ "$file" != 0 ]
    then mv $file $file.old
  else $file
  fi
done
+ for file in '$1'
+ grep '.old$'
+ /var/tmp/uli101.npkrause.assign4.8938.testdir
/home/npkrause/scripts/oldfiles: line 4: /var/tmp/uli101.npkrause.assign4.8938.testdir: Is a directory
+ '[' /var/tmp/uli101.npkrause.assign4.8938.testdir '!=' 0 ']'
+ mv /var/tmp/uli101.npkrause.assign4.8938.testdir /var/tmp/uli101.npkrause.assign4.8938.testdir.old

Files in 'testdir' after 'oldfiles' was run:
ls: cannot access /var/tmp/uli101.npkrause.assign4.8938.testdir: No such file or directory

Filenames don't seem to be correct

Please hit <Enter> to continue with the Assignment
引用$dir和$file的所有用法,双方括号内除外,以防止名称中出现空格或元字符


使用“mv-”防止目录名以“-”开头。

脚本应该做什么?您没有告诉我们足够的信息来确定什么似乎有效或者您尝试了什么测试。您无法执行$file | grep。。。他正在努力。您希望将该文件作为参数提供给grep。grep'\.old$'$file。您应该运行脚本并修复它报告的警告,然后尝试找出脚本实际上应该执行的操作,因为现在还不清楚,甚至不一定正常。如果问题是如何检查文件名是否以.old结尾?,然后,这将是一个更简洁、更有用的标题。您将编写一个名为“oldfiles”的bash shell脚本,该脚本使用一个参数,即目录名,并将扩展名.old添加到目录中所有没有扩展名的可见文件中。将子目录视为普通文件。例如:$ls file1 file2.old file3 old file4.old$old files.$ls file1.old file2.old file3old.old file4.old
dir=$1
for file in "$dir"/* ; do
    [[ $file == *.old ]] || mv -- "$file" "$file.old"
done