私はこの問題で苦労しています。私のファイルの例は次のとおりです。
~/download/Video/CE/
~/download/Video/CE/153
~/download/Video/CE/153/2022-03-04
~/download/Video/CE/153/2022-03-05
~/download/Video/CE/281
~/download/Video/CE/281/2022-03-04
~/download/Video/CE/281/2022-03-05
~/download/Video/GA/
~/download/Video/GA/154
~/download/Video/GA/154/2022-03-04
~/download/Video/GA/154/2022-03-05
~/download/Video/GA/615
~/download/Video/GA/615/2022-03-04
~/download/Video/GA/615/2022-03-05
...etc
/download/Video には数十のフォルダがあり、/download/video/*/ には数百のフォルダがあります。
「2022-03-04」を含むすべてのフォルダとその内容をすべて新しいディレクトリに移動しようとしています。私が望む結果は次のとおりです。
/mnt/d/archive/Video/CE/153/2022-03-04
/mnt/d/archive/Video/CE/281/2022-03-04
/mnt/d/archive/Video/GA/154/2022-03-04
...etc
さまざまな方法を試しましたが、最大の問題は、2022-03-05フォルダ(およびスーパーディレクトリ)をメインドライブの親フォルダに保持したいので、単にビデオフォルダを/mnt/d/archiveに移動できないことです。 。
これまでに試したことは次のとおりです。
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 /mnt/d/archive/Video/CE/$subdir/; done;
^ 次に、/Video/にGAや他のすべてのサブディレクトリのコードをコピーして貼り付けます。
これで以下が生成されます。
/mnt/d/archive/Video/CE/153/file.mp4
/mnt/d/archive/Video/CE/153/file2.mp4
/mnt/d/archive/Video/CE/281/file.mp4
...etc
「2022-03-04」フォルダ自体をコピーしないことを除いて素晴らしいです。 2022-03-04フォルダが必要です。だから、次のコードを試してみました。
cd ~/download/Video/CE; for subdir in *; do mv $subdir/2022-03-04 ~/mnt/d/archive/Video/CE/$subdir/2022-03-04; done;
しかし今、もう一つの問題がありました。今回はフォルダやファイルはコピーされませんでした。ただ、「該当するファイルやディレクトリはありません。」エラーが発生しました。
どんなアイデアがありますか?
答え1
私の選択は速いのでtarです。
(cd ~/download/Video && find . -type d -name 2022-03-04 | tar -T - -cpf - --remove-files | tar -C "/mnt/d/archive/Video/" -xpf -)
答え2
あなたの質問を正しく理解すると、次のように動作します。
cd ~/download/Video
for i in $(find * -type d -name '2022-03-04'); do
mkdir -p /mnt/d/archive/Video/"$i"
mv "$i"/* /mnt/d/archive/Video/"$i" && rm -r "$i"
done
これは次のことを行います。
- 「2022-03-04」という名前のすべてのディレクトリを探します。
- 必要に応じて、アーカイブの場所にディレクトリツリーを再作成します。
- 「2022-03-04」の内容を対応するアーカイブディレクトリに移動し、元の「2022-03-04」ディレクトリを削除します。
(標準免責事項、ファイル名に奇妙な文字が含まれていると壊れます。)