在bash中按名称剪切文件

时间:2018-11-15 16:00:29

标签: linux bash shell directory cut

我有一个包含数千个图像的文件夹,并且我需要剪切所有图像,并在另一个文件夹中的文件名中使用“ F”作为第三个字母。有没有办法编写一个bash代码来做到这一点?或者我该怎么办?

3 个答案:

答案 0 :(得分:2)

这不仅仅是使用glob的问题:

mv source_folder/??F* destination_folder

男子bash:

  

模式匹配

     

除以下描述的特殊图案字符外,任何出现在图案中的字符都会匹配。 NUL字符可能不会出现在模式中。反斜杠转义以下字符;匹配时,转义的反斜杠将被丢弃。如果要在字面上进行匹配,则必须对特殊模式字符加引号。

     

特殊图案字符具有以下含义:

     

*
  匹配任何字符串,包括空字符串。启用globstar shell选项并在路径名扩展上下文中使用*时,用作单个模式的两个相邻*将匹配所有文件以及零个或多个目录和子目录。如果后跟一个/,则两个相邻的* s仅匹配目录和子目录。

     

?

     

匹配任何单个字符。

答案 1 :(得分:1)

如果它们足够多,该命令可能会使解释器不堪重负,尤其是在较旧的系统上。当命令超过1kb时,我已经使用了旧的ksh shell puke。您可能需要使用更复杂的构造。

find source_folder -name '??F*' -maxdepth 1 | 
   xargs -IF mv F destination_folder

替代语法,可能效率更高-

find source_folder -name '??F*' -maxdepth 1 | 
   xargs mv -t destination_folder

但是如果可能的话,简单更好。首先尝试enter image description here的解决方案。

祝你好运。

答案 2 :(得分:0)

创建一个.sh文件(例如script.sh)并放入代码:

#!/bin/bash
letter_order=3 # Third
search_letter="F" # Find the letter F

for file in *; do
    if [ "${file:$letter_order-1:1}" == "$search_letter" ]; then
        mv ${file} myNewFolderName/
        printf '%s\n' "${file}"
    fi
done

因此,只需运行脚本'$ ./script.sh'