【问题标题】:Moving files from one subdirectory to another将文件从一个子目录移动到另一个子目录
【发布时间】:2016-02-24 09:53:29
【问题描述】:

我尝试将文件从一个目录移动到另一个目录,但没有成功。所以我搜索并找到了一个适合我想要的答案。当我运行它,修改到我的目录时,它给出了

想做什么:

${filename,,*}: 替换错误!

这是我用的:

for filename in *; do
  case "${filename,,*}" in
    b01.nii*)    mv "$filename" "$/Users/dave/Desktop/test/untitled_folder_*/str" ;;
    vol_01.nii*) mv "$filename" "$/Users/dave/Desktop/test/untitled_folder_*/rs" ;;
    *)           echo "don't know where to put $filename";;
  esac
done

谢谢

【问题讨论】:

  • 这是什么语言?
  • Mac 终端中的 Shell (bash)!
  • 好的,谢谢。我试试!
  • Same.. ${filename,,}: 替换错误
  • 您是否错误地将$ 放在$/Users/dave.. 中,这应该是一个变量吗? .. 你的$filename 也可能有一些麻烦的字符,尝试使用像这样mv -- "$filename" .. 的2个破折号

标签: bash file-move


【解决方案1】:

你两个错误:

主要问题是 for 命令,变量$filename 包含* 而不是真实的文件名。你应该使用$(find . -name "*");do中的文件名

第二个是这样的:

您必须确定 $filename 变量的值,即在我的 bash shell 中,文件名输出是

./b01.nii 
./vol_01.nii 

./b01.nii* )的情况下最好使用下面的语法

我已将您的 mv 替换为 echo 只是为了测试脚本:

for filename in $(find . -name "*"); do

  case ${filename} in
    ./b01.nii* )    
                echo "$filename ${filename}/Users/dave/Desktop/test/untitled_folder_*/str" ;;
    ./vol_01.nii* ) 
                echo "$filename ${filename}/Users/dave/Desktop/test/untitled_folder_*/rs" ;;
    *)          
                echo "don't know where to put $filename";;
  esac
done

我的输出是

sh-4.3$ bash -f main.sh                                                                                                                                                                                                                                 
don't know where to put .                                                                                                                                                                                                                               
don't know where to put ./main.sh                                                                                                                                                                                                                       
don't know where to put ./.cg_conf                                                                                                                                                                                                                      
don't know where to put ./myfile_12345                                                                                                                                                                                                                  
don't know where to put ./myfile_17676                                                                                                                                                                                                                  
don't know where to put ./myfile_9898                                                                                                                                                                                                                   
don't know where to put ./Newfile.sh                                                                                                                                                                                                                    
./b01.nii ./b01.nii/Users/dave/Desktop/test/untitled_folder_*/str                                                                                                                                                                                       
./vol_01.nii ./vol_01.nii/Users/dave/Desktop/test/untitled_folder_*/rs 

问候

克劳迪奥

【讨论】:

  • 不要解析find的输出!如果文件名包含空格或 glob 字符,则会损坏。 for filename in * 是在 Bash 中循环文件的正确方法。
猜你喜欢
  • 2016-06-09
  • 2016-04-04
  • 2017-07-20
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2020-05-01
  • 2019-09-26
  • 1970-01-01
相关资源
最近更新 更多