ファイル名でディレクトリを作成し、ファイルをそのフォルダに移動します。

ファイル名でディレクトリを作成し、ファイルをそのフォルダに移動します。

私の問題は次のように少し異なります。

ファイル名でディレクトリを作成し、ファイルをそのフォルダに移動します。

これは、同じフォルダに各ファイルの2つの類似コピーがあるためです。たとえば、次のようになります。

001.txt と 001(1).txt

100.txt および 100(1).txt

2 つの類似コピーごとにフォルダを作成し、2 つの類似コピーを 1 つのフォルダに移動します。 001.txtと001(1).txtは001フォルダに保存されます。

上記の質問に基づいていましたが、うまくいきませんでした。上記の質問に対するコマンドは次のとおりです。

set -o errexit -o nounset
cd ~/myfolder
for file in *.txt
do
    dir="${file%.txt}"
    mkdir -- "$dir"
    mv -- "$file" "$dir"
done

試験を終えた:

set -o errexit -o nounset
cd ~/myfolder

for file in *(1).txt
do
    dir="${file%.txt}"
    mkdir -- "$dir"
    mv -- "$file" "$dir"
done

このコマンドは、各ファイルのフォルダを作成します。

フォルダを作成するために必要なファイルを選択し、別のコマンドを実行して同じ宛先を保持できるように、001.txtや001(1).txtなどのファイルを区別する提案がありますか?

ベストアンサー1

ほぼすべて来ました。あなたが見逃しているのは、ディレクトリを派生させるためにファイル名から括弧内の数字を削除する必要があることです。

#!/bin/sh
for file in *.txt
do
    dir="${file%.txt}"         # Remove suffix
    dir="${dir%(*)}"           # Remove bracketed suffix if present

    mkdir -p -- "$dir"         # Create if necessary
    mv -f -- "$file" "$dir"    # Move the file
done

mkdirおよび前にプレフィックスを追加すると、操作が実行される前に何が起こるかを確認できますmvecho

おすすめ記事