我有一堆包含 MP3 文件的目录。这些目录内部不包含其他目录。
如何删除所有目录结构而不删除文件?
这基本上是将这些目录中找到的所有文件移动到当前目录。当前目录是其他目录所在的目录。
答案1
与find
单线性:
find . -mindepth 2 -type f -execdir sh -c 'mv -vt ../ "$@" ; rmdir "$PWD"' _ {} +
-mindepth 2
将使find
命令忽略当前目录的文件。-execdir
这在这里很重要,这使得将find
当前目录更改为找到文件的目录,并且其中的命令将在该目录本身上运行。mv -vt ../ "$@"
,这将扩展到mv -vt ../ "file1" "file 2" "..." "fileN"
rmdir "$PWD"
将删除该目录,-execdir
该目录将在所有文件迁移到该目录后运行父目录。
巴小心移动到目标路径时,不会覆盖具有相同文件名的文件。
答案2
parent="$PWD"
for dir in *; do
test -d "$dir" || continue
pushd "$dir" || continue
mv -i -- * "$parent"
popd
rmdir "$dir"
done