根据文件名移动文件

根据文件名移动文件

我有一个包含 .tif 文件的文件夹,我想根据它们的文件名将其移动到同名的文件夹中。示例文件 123456789_002.tif --> dir 113456789 。

如何获取 _ 之前的文件的第一部分并使用它来移动文件?

答案1

如果文件名存储在变量中,您可以在 bash 和类似的 shell 中使用$filename第一个下划线之前的部分。_${filename%%_*}

一个小脚本可能看起来像这样:

#!/bin/bash
# loop over all tif files
for filename in *.tif ; do
    # extract portion before _
    dirname="${filename%%_*}"
    # ensure destination folder exists
    mkdir -p "$dirname/"
    # move the file
    mv "$filename" "$dirname/" 
done

答案2

您可以将 _more_stuff 替换为空,只保留第一部分。例如,使用变量 i 中的文件名,比如firstpart=${i/_?*/}

for i in *_*.tif; do 
    fp="${i/_?*/}"
    mkdir "$fp" 2>/dev/null # ignore errors else this will complain for 2nd etc files
    mv "$i" "$fp"
done
# do remaining .tif files, with no "_"
for i in *.tif; do 
    fp="${i/.tif/}"
    mkdir "$fp" 2>/dev/null # ignore errors else this will complain for 2nd etc files
    mv "$i" "$fp"
done

相关内容