我有一个包含数千个图像的文件夹,并且我需要剪切所有图像,并在另一个文件夹中的文件名中使用“ F”作为第三个字母。有没有办法编写一个bash代码来做到这一点?或者我该怎么办?
答案 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
祝你好运。
答案 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'