
次のような場所に大量のファイルがあります:
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1)/(filename1).ext
.../(filename2)/(filename2).ext
.../(filename3)/(filename3).ext
.ext
ファイルを親フォルダーに一括移動しようとしているので、次のようになります。
C:/Users/(Username)/Desktop/(Parent-Collection name)/(filename1).ext
学校のバインダーから仕切りを取り除くのと同じように、サブフォルダーの必要性が本質的になくなります。
答え1
これをやらなければならないかもしれないシグウィンこれは、M$ Windoze スパイウェアを (まだ??) 実行している人にはお勧めです。
次のようなものが動作するはずです。これをディレクトリ内で実行しますC:/Users/(Username)/Desktop/(Parent-Collection name)/
(cygwin では次のように参照されます) /cygdrive/c/Users/(Username)/Desktop/(Parent-Collection name)/)
。
for i in `find . -name "*" -type f`;
do mv $i `echo $i | sed 's/.*\/\([^/]*\)/\1/'`;
done
(Parent-Collection name)
これにより、下のすべてのディレクトリ内のすべてのファイルが に移動します(Parent-Collection name)
。具体的には、これは現在のディレクトリから下のすべてのファイルをループするdo
インデックス付きのループです。これがコマンドがリストするものです。 を実行すると、構文を調べることができます。次に、そのファイル ( ) を新しい場所に移動 ( ) します。新しい場所は、パスを削除してベース ファイル名を残すように設定されているストリーム エディタ ( 、これは で検索できます) で実行される元のファイル名 ( ) によって指定されます。i
find
man find
mv
$i
echo $i
sed
man sed
テストしてみることをお勧めします (空のテキスト ファイルなどを含むサブディレクトリをいくつか含むディレクトリを作成します)。必ずバックアップを取ってください。
次に、現在のディレクトリの下にあるすべての(現在は空の)ディレクトリを削除します。
for i in `find . -name "*" -type d`;
do rmdir $i;
done
ここで唯一異なるのは、ファイル ( ) ではなくfind
ディレクトリ ( ) を検索するように指示し、それらのディレクトリ ( 、これは空のディレクトリでのみ機能します) を削除することです。-type d
-type f
rmdir
Linux ってクールじゃないですか? Cygwin は Linux のパワーの一部を提供し、Linux に慣れるための第一歩となり、いつか Ubuntu のようなものに移行できるかもしれません。:)
答え2
これは Powershell で実行できますが、使用している Windows のバージョンはわかりません。
$sourcefolder = "C:\Users\username\Desktop\ParentCollectionName"
$allfiles = Get-ChildItem -Recurse $sourcefolder | Where-Object {$_.PSIScontainer -eq $false}
ForEach ($file in $allfiles)
{
$destinationfolder = Split-Path -Parent $file.Directory.FullName
Move-Item $file.FullName $destinationfolder
}
サブディレクトリ内のすべてのファイルはフォルダ$sourcefolder
に移動されますParrentCollectionName
。その後、空のサブフォルダを削除できます。