如果包含文件,则将整个文件夹移动到新目录

Move the entire folder into new directory if it contains a file

我有一个目录

test2 内容如下:

file1
  test.pdb
  xyz.txt
  1.txt

file2
  test.pdb
  xyz.txt

file3
  test.pdb
  xyz.txt 
  1.txt

我想将包含 1.txt 的文件夹(此处为文件 1 和文件 3)移动到名为 'complete' 的新目录中。如何操作?

期望的输出:

完成

file1
  test.pdb
  xyz.txt
  1.txt

file3
  test.pdb
  xyz.txt 
  1.txt

测试2

file2
  test.pdb
  xyz.txt

到目前为止的代码:

find . -maxdepth 2 -name "*ionized.pdb" -print| sed "s|^\./||"

假设您正在使用 bash,您可以从 test2/ 父目录使用此命令:

while IFS= read -rd '' d; do
   [[ -f $d/1.txt ]] && echo mv "$d" complete
done < <(find test2 -type d -print0)

一旦对输出感到满意,您可以在上面的命令中删除 mv 之前的 echo

如果不使用 bash 则使用此管道:

find test2 -type d -print0 |
while IFS= read -rd '' d; do [ -f "$d/1.txt" ] && echo mv "$d" complete; done

这假定目录 test2complete 处于同一级别。