递归复制文件而不保留目录

递归复制文件而不保留目录

我有一堆包含 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

相关内容