识别目录并使用 find in bash 移动内容
Identify a directory and move content with find in bash
我想将某些特定目录的所有文件移动到另一个名为 shp_all 的目录。
所讨论的特定目录是所有包含名称中带有 "shp" 的文件的目录。
该目录如下所示:
-data
--shp_all
--d1
--d2
...
--dN
我设法找到了一种方法来识别所有目录,在 d1,...,dN
中有名称为 "shp"
:
的文件
find . -name '*shp*'
但是,我不知道如何正确使用exec
或execdir
来获取所有与输出相同目录中的文件和将它们移动到 shp_all
以下是尝试过但没有奏效的方法:
find . -name '*shp*' -execdir mv '{}/*' shp_all ';'
你这里有个小问题,你的目标路径./shp_all/
在你搜索的路径之内。这会给您带来麻烦,因为文件可能会在 find 开始搜索文件夹之前移动到文件夹中。
我建议在文件选择/移动期间将其移出。
以下代码段应 运行 来自您上面描述的 ./data
文件夹。
mv ./shp_all ..
find . -name "*shp*" -exec mv {} ../shp_all/ \;
find最后的\;
重要关闭-exec
否则命令执行失败
希望对您有所帮助。
戴夫
我认为一种方法如下(请记住上面 Dave 提出的将目标目录移出 find
路径的建议):
mv $(find . -name "*shp*" -printf "%h\n" | uniq)/* ../shp_all/
请注意,这也会移动任何子目录。如果你真的只想要文件,你可以添加另一个级别来只找到 -type f
:
mv $(find $(find . -name "*shp*" -printf "%h\n" | uniq) -type f) ../shp_all/
我想将某些特定目录的所有文件移动到另一个名为 shp_all 的目录。 所讨论的特定目录是所有包含名称中带有 "shp" 的文件的目录。 该目录如下所示:
-data
--shp_all
--d1
--d2
...
--dN
我设法找到了一种方法来识别所有目录,在 d1,...,dN
中有名称为 "shp"
:
find . -name '*shp*'
但是,我不知道如何正确使用exec
或execdir
来获取所有与输出相同目录中的文件和将它们移动到 shp_all
以下是尝试过但没有奏效的方法:
find . -name '*shp*' -execdir mv '{}/*' shp_all ';'
你这里有个小问题,你的目标路径./shp_all/
在你搜索的路径之内。这会给您带来麻烦,因为文件可能会在 find 开始搜索文件夹之前移动到文件夹中。
我建议在文件选择/移动期间将其移出。
以下代码段应 运行 来自您上面描述的 ./data
文件夹。
mv ./shp_all ..
find . -name "*shp*" -exec mv {} ../shp_all/ \;
find最后的\;
重要关闭-exec
否则命令执行失败
希望对您有所帮助。
戴夫
我认为一种方法如下(请记住上面 Dave 提出的将目标目录移出 find
路径的建议):
mv $(find . -name "*shp*" -printf "%h\n" | uniq)/* ../shp_all/
请注意,这也会移动任何子目录。如果你真的只想要文件,你可以添加另一个级别来只找到 -type f
:
mv $(find $(find . -name "*shp*" -printf "%h\n" | uniq) -type f) ../shp_all/