如何在同一命令中查找某些文件并将它们移动到新目录?

Joh*_*ohn 6 shell bash directory find

所以我环顾四周,我发现只有在目录已经创建的情况下才能做到这一点,这是这样的:

find source -name '*.z' -exec cp {} destination \;
Run Code Online (Sandbox Code Playgroud)

但是如何创建一个新目录,以便在同一命令中发送这些文件?这是我尝试过但没有成功的方法:

find source -name '*.z' -exec cp {} | mkdir newDirectory \;
Run Code Online (Sandbox Code Playgroud)

jor*_*anm 11

一种选择是使用install命令而不是cp. 它可以选择创建所有主要目录。

find source -name '*.z' -exec install -D {} dest \;
Run Code Online (Sandbox Code Playgroud)


ter*_*don 1

无法通过mkdir这种方式传输数据。你可以这样做:

find source -name '*.z' -exec sh -c 'mkdir -p newDirectory && cp "$@" newDirectory' _ {} +
Run Code Online (Sandbox Code Playgroud)

或(假设文件名不包含换行符)

find source -name '*.z' | while IFS= read -r foo; do 
   mkdir -p newDirectory;
   cp "$foo" newDirectory;
done 
Run Code Online (Sandbox Code Playgroud)

或者,如果您只想创建一个目录,那么名称始终相同:

mkdir newDirectory; find source -name '*.z' -exec cp {} newDirectory \;
Run Code Online (Sandbox Code Playgroud)