ファイル名に基づいてファイルを移動する

ファイル名に基づいてファイルを移動する

ファイル名に基づいて同じ名前のフォルダに移動したい.tifファイルを含むフォルダがあります。サンプルファイル 123456789_002.tif --> dir 113456789.

_前のファイルの最初の部分をどのようにインポートしてファイルを移動するのに使用できますか?

答え1

ファイル名が変数に格納されている場合は、bash と同様のシェルで$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を何もないものに置き換え、最初の部分だけを保持できます。たとえば、firstpart=${i/_?*/} など、変数 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

関連情報