私の問題は次のように少し異なります。
ファイル名でディレクトリを作成し、ファイルをそのフォルダに移動します。
これは、同じフォルダに各ファイルの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
および前にプレフィックスを追加すると、操作が実行される前に何が起こるかを確認できますmv
。echo