我尝试查找*.e*与另一个文件 ( md.tpr)位于同一目录中的一些文件 ( )。我需要使用以下内容列出它们(用于进一步处理):
find . -name md.tpr -execdir ls *.e* \;
Run Code Online (Sandbox Code Playgroud)
我尝试了此命令的一些变体和其他一些变体(包括单引号传递给的命令-execdir或将其作为sh -c 'ls *.e*'或eval 'ls *.e*'仅举几例)。似乎通配符在传递给-exec或时不起作用-execdir。运行上述命令时出现的错误是:
ls: *.e*: No such file or directory
Run Code Online (Sandbox Code Playgroud)
就像一个健全性检查一样,我做-execdir pwd了它并打印了它应该打印的内容,所以看起来它是 globbing 的问题,因为这些*.e*文件确实存在于这个测试列出的目录中。
现在,我能够以一种不太优雅的方式解决这个问题,但它让我感到困惑,为什么通配符和通配符在这里不起作用。有任何想法吗?还是我完全偏离了轨道?
我使用 bash 3.2.25(旧的,但我在该系统上没有管理员权限)。
另外,有趣的是,如果我这样做
find ~ -name .bashrc -maxdepth 2 -execdir ls -d .b* \;
Run Code Online (Sandbox Code Playgroud)
除非从$HOME.
天真的方法是find dir1 dir2 dir3 -type d -name .git | xargs -I {} dirname {}
,但对我来说太慢了,因为我在 git 存储库中有很多深层文件夹结构(至少我认为这是原因)。我已经读过关于我可以prune用来防止 find 在找到某些内容后递归到目录中的内容,但有两件事。我不确定这是如何工作的(我的意思是我不明白prune虽然我已经阅读了手册页),第二个它在我的情况下不起作用,因为它会阻止find递归到.git文件夹但不是全部其他文件夹。
所以我真正需要的是:
对于所有子目录,检查它们是否包含.git文件夹,如果它停止在此文件系统分支中搜索并报告结果。如果这也能从搜索中排除任何隐藏的目录,那就太完美了。
我只是想列出当前目录下的所有目录和文件,并使用以下命令写入文件或目录:
find -exec echo `echo {} : ;if [ -f {} ]; then echo file; else echo directory;fi` \;
Run Code Online (Sandbox Code Playgroud)
我知道这是一个愚蠢的命令,我可以使用其他东西,例如-type for -type d,但我想了解为什么那段代码没有按我预期的那样工作。它只是将目录打印到所有这些。例如 while 的输出find是:
.
./dir
./dir/file
Run Code Online (Sandbox Code Playgroud)
我的代码的输出是:
. : directory
./dir : directory
./dir/file : directory
Run Code Online (Sandbox Code Playgroud)
和输出
echo `echo dir/file : ;if [ -f dir/file ]; then echo file; else echo directory;fi`
Run Code Online (Sandbox Code Playgroud)
是
dir/file : file
Run Code Online (Sandbox Code Playgroud)
我正在研究Ubuntu 14.10和使用find (GNU findutils) 4.4.2
我想复制和重命名一个目录中的多个 c 源文件。
我可以这样复制:
$ cp *.c $OTHERDIR
Run Code Online (Sandbox Code Playgroud)
但我想给所有文件名一个前缀:
file.c --> old#file.c
Run Code Online (Sandbox Code Playgroud)
我怎样才能在 1 步中做到这一点?
鉴于这些文件名:
$ ls -1
file
file name
otherfile
Run Code Online (Sandbox Code Playgroud)
bash 本身对于嵌入的空白完全没问题:
$ for file in *; do echo "$file"; done
file
file name
otherfile
$ select file in *; do echo "$file"; done
1) file
2) file name
3) otherfile
#?
Run Code Online (Sandbox Code Playgroud)
但是,有时我可能不想处理每个文件,甚至不希望使用严格的 in $PWD,这是find进来的地方。名义上也处理空格:
$ find -type f -name file\*
./file
./file name
./directory/file
./directory/file name
Run Code Online (Sandbox Code Playgroud)
我正在尝试编造这个scriptlet的 whispace-safe 版本,它将获取输出find并将其呈现到select:
$ select file in $(find -type f -name file); do echo $file; break; …Run Code Online (Sandbox Code Playgroud) 我想找到当前目录的子目录,该目录(即子目录)包含 2 个或更多常规文件。
我对包含少于 2 个文件的目录不感兴趣,也不对只包含子目录的目录感兴趣。
我有一组文件( *.zip, *.txt, *.tar.gz, *.doc, ...etc )。这些文件驻留在路径中。我想找到所有文件 (*.txt),然后只复制包含特定单词的文本文件(例如 LINUX/UNIX)。
我运行了以下内容:
find . -name "*.txt" | grep 'LINUX/UNIX'
Run Code Online (Sandbox Code Playgroud)
此命令能够找到所有文本文件,然后“grep”通过仅列出包含“LINUX/UNIX”的文本文件来过滤生成的文本文件。
如何将这些最终文件(即包含“LINUX/UNIX”的文本文件)复制到特定的选择路径?
我试着申请 xargs
find . -name "*.txt" | grep 'LINUX/UNIX' | xargs cp <to a path>
Run Code Online (Sandbox Code Playgroud)
但它没有用
我有一个文件夹,里面有 137795 个文件。我需要删除所有这些。当我跑步时,rm *我得到-bash: /bin/rm: Argument list too long. 我如何克服这个错误?
我想要一个执行以下操作的 bash 脚本:
我当前的脚本如下所示:
for f in `find . -type f -iname "*.jpg"`
do
convert ./"$f" -resize 800x800\> ./"${f%.jpg}_thumb.jpg"
mv ./"${f%.jpg}_thumb.jpg" /home/user/thumbs/
done
Run Code Online (Sandbox Code Playgroud)
它不会转换包含空格/特殊字符的文件(或包含所有内容的文件夹)。我尝试过,print0但没有帮助。
我必须使用什么命令来删除以目录开头的所有graphene-80目录/tmp?
我可以在rm命令中添加什么作为选项?