示例用法

示例用法

我有一个文档库,其中所有文件都位于基于类别名称的文件夹中,但它们也都位于名为“pdf”的子文件夹中。有没有办法在 bash 中扫描库中的所有目录并将名为 pdf 的文件夹中的所有文件移动到其父目录中?

答案1

下面将pdf文件夹里的每个文件移动到父目录中。

find ~/some/folder -type d -name 'pdf' -print0 | while IFS= read -d '' dir
do
  find "$dir" -type f -maxdepth 1 -exec echo mv -- {} "$dir"/.. \;
done

echo一旦确定它满足您的需要,就将其删除。

请注意,如果父级文件已包含同名文件,则此操作将不经询问而直接覆盖文件。使用mv -i此功能可在覆盖任何内容之前提示您确认。

答案2

这是我的想法。它不是最漂亮的东西,但它符合您的要求:

find . -ipath "*pdf/*.pdf" -type f -print0 | xargs -0 -I{} sh -c 'mv "{}" "$(dirname "{}")"/..'

它仅将子文件夹.pdf中的文件移动pdf到其相应的父目录中。要更改命令以移动全部子文件夹中的文件pdf,将ipath参数调整为*pdf/*


示例用法

$ find .
.
./category1
./category1/other_dir
./category1/other_dir/c1o1.txt
./category1/pdf
./category1/pdf/c1p1.pdf
./category1/pdf/c1p2.pdf
./category1/pdf/c1p3.pdf
./category2
./category2/other_dir
./category2/other_dir/c2o1.txt
./category2/pdf
./category2/pdf/c2p1.pdf
./category2/pdf/c2p2.pdf
./category2/pdf/c2p3.pdf

$ find . -ipath "*pdf/*.pdf" -type f -print0 | xargs -0 -I{} sh -c 'mv "{}" "$(dirname "{}")"/..'
.
./category1
./category1/c1p1.pdf
./category1/c1p2.pdf
./category1/c1p3.pdf
./category1/other_dir
./category1/other_dir/c1o1.txt
./category1/pdf
./category2
./category2/c2p1.pdf
./category2/c2p2.pdf
./category2/c2p3.pdf
./category2/other_dir
./category2/other_dir/c2o1.txt
./category2/pdf

相关内容