bash:从一个未知的子目录中移动一个文件(通配符?)

时间:2016-04-23 16:34:06

标签: bash mv

假设有一个目录包含许多子目录bbbcccx.txt ... 在这些目录中的一个(并且只有一个!)是一个名为mv */x.txt {target_dir} 的文件(但我不知道在哪个目录中)。

我想使用以下方法将该文件移动到备用目录:

No such file or directory

但是这不起作用:[ -f ]

作为一种解决方案,我最终循环遍历所有子目录,并检查文件是否在<img src="https://randomuser.me/api/portraits/thumb/men/57.jpg" class="a"> <img src="https://randomuser.me/api/portraits/thumb/women/14.jpg" class="a"> <img src="https://randomuser.me/api/portraits/thumb/women/7.jpg" class="a"> <br> <div id="sectionB"> <img src="http://placehold.it/48" class="b"> <img src="http://placehold.it/48" class="b"> <img src="http://placehold.it/48" class="b"> </div> <br> <button id="reset">Reset</button> ,并移动文件一次。

但是,我想知道是否有更简单的解决方案?

2 个答案:

答案 0 :(得分:3)

find . -type f -name x.txt -exec mv {} target_dir \;

答案 1 :(得分:1)

bash 联系页面:

globstar
        If set, the pattern ** used in a pathname expansion context will match
        all files and zero or more directories and subdirectories.  If the
        pattern is followed by a /, only directories and subdirectories match.

您可以尝试启用'globstar'选项,然后使用

shopt -s globstar
echo **/x.txt

如果echo找到文件,那么等效的

mv **/x.txt {target_dir}

注意: globstar 是一个仅限bash的选项(在bash 4.0中添加)如果你使用旧的版本(例如MAC上标准的bash 3),这将无效。