だから、私は19.04サーバーで次のスクリプトを使用して、一連のビデオファイルをプレフィックス付きのフォルダーに移動しようとしました:
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
shopt -s nocasematch
for file in *
do
for dir in "${dirs[@]}"
do
if [ -d "$file" ]; then
echo 'this is a dir, skipping'
break
else
if [[ $file =~ ^[$dir] ]]; then
echo "----> $file moves into -> $dir <----"
mv "$file" "$dir"
break
fi
fi
done
done
どこがうまくいかなかったのかはわかりませんが、ファイルをフォルダに移動する代わりに、単一の出力に移動しました。そう:
----> a1.ts moves into -> A <----
----> a2.ts moves into -> A <----
----> a3.ts moves into -> A <----
----> a4.ts moves into -> A <----
----> a5.ts moves into -> A <----
----> c1.ts moves into -> C <----
----> c2.ts moves into -> C <----
----> c3.ts moves into -> C <----
----> c4.ts moves into -> C <----
----> c5.ts moves into -> C <----
幸運にも、プロセスが意図したとおりに行われず、フォルダ全体を通過しなかったことに気づいたら、すぐにプロセスを停止しました(CTRL + C)。
これで、これらのファイルがA
になりました。 およびC
、Gb未満であり、見た目はSINGLEビデオです。
フォルダ自体の合計ディスク使用量には50Gbが含まれていませんが、コンピュータの全体的なディスク容量は同じままです。
ファイルが削除されていないと思わせますか?
助けてくれてありがとう🙂
編集:ファイルは実際になくなり、最後に書き込まれるファイルのみが残ります。ディスク使用情報が更新されるまでに時間がかかりました。話の教訓として、前にモックファイルでスクリプトを実行してください。 !
承認された回答:
これが問題だと思います。ディレクトリA、B、C…Zを作成する必要があります。作成した場合は、mv
コマンドはファイルをそれらのディレクトリに移動する必要があります。
ただし、そうでない場合は、mv
コマンドは、ファイルをA、B、Cという名前のファイルに移動します…そしてこれがあなたがしたことだと思います。
シェルスクリプトをより安全にするには、移動を開始する前に、ディレクトリを作成する必要があります(まだ存在しない場合)。
dirs=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z)
for dir in "${dirs[@]}"
do
mkdir -p $dir
done
より安全にしたい場合は、mv
を使用することもできます -i
を使用 オプション
-i, --interactive
prompt before overwrite