我在Linux上用bash编写脚本,需要遍历给定目录中的所有子目录名称.如何遍历这些目录(并跳过常规文件)?
例如:
给定目录是否/tmp/
具有以下子目录:/tmp/A, /tmp/B, /tmp/C
我想要检索A,B,C.
有人能告诉我是否应该在shell脚本中包含变量的引号?
例如,以下是正确的:
xdg-open $URL
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)
要么
xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我想写一个shellcript,它将循环遍历文件夹中的所有文件并回显"put $ {filename}".谁能指出我正确的方向?
这是我用来在php文件中查找匹配(queryString)的命令,在当前目录中,使用grep,不区分大小写,并在行中显示匹配的结果:
find . -iname "*php" -exec grep -iH queryString {} \;
有没有办法将匹配的文件名管道到另一个脚本?
我可能会运行-exec命令两次,但这似乎效率低下.
我想在Mac OS X上做的事实上就是在发现者中"揭示"该文件.我想我可以处理那个部分.如果我不得不放弃内联匹配并让grep显示文件名,然后将其传递给第三个脚本,那也没关系 - 我会解决的.
但我实际上甚至不确定如何将输出(匹配的文件名)传递给其他地方......
救命!:)
我想在finder窗口中显示每个文件 - 所以我可能不会使用-q标志并停在第一个.
我将在控制台中运行它,理想情况下我希望看到那里打印的内联匹配,以及能够将它们传递给另一个脚本,如oascript(applescript,在finder中显示它们).这就是我一直在使用的原因-H- 因为我喜欢看到文件名和匹配.
如果我不得不满足于使用,-l以便文件名可以更容易地通过管道传输到另一个脚本,那也没关系.但我认为,看从@Charlie马丁下面的答复后,该xargs的可能有帮助这里在同一时间,单一的发现,和单grep命令这样做既.
我确实说过bash,但我真的不介意是否需/bin/sh要这样做 - 我不太了解差异,但我知道有一些重要的.
谢谢大家的回复,我将在命令行尝试其中的一些,看看我是否能让他们中的任何一个工作,然后我想我可以选择最好的答案.如果您希望我澄清任何其他内容,请发表评论.
再次感谢!
我正在使用此bash脚本代码在一个文件夹中循环浏览某些文件(所有以MOVIE开头的文件):
for i in MY-FOLDER/MOVIE*
do
Run Code Online (Sandbox Code Playgroud)
当文件夹中有文件时,它可以正常工作.但是当没有任何内容时,它会以某种方式继续使用它认为名为MY-FOLDER/MOVIE*的文件.
我怎么能避免它进入之后的事情
do
Run Code Online (Sandbox Code Playgroud)
如果文件夹中没有任何文件?
我有我的文件夹中的3个.wav文件,我想将它们转换成MP3播放与ffmpeg的我写了这个bash脚本,将来作为跟随,但是当我执行它,只有第一个将被转换为MP3,我应该怎么做让脚本不断浏览我的文件
这是脚本:
#!/bin/bash
find ./ -name "*.wav" -print | while read f
do
name=${f:2:${#f}-6}
cmd='ffmpeg -i "$name.wav" -ab 320k -ac 2 "$name.mp3"'
eval $cmd<br>
done
Run Code Online (Sandbox Code Playgroud) 我正在做一个需要批量处理大量图像文件的项目。为了使事情更容易,我编写了一个脚本,该脚本将根据用户输入创建n目录并将m文件移动到这些目录中。
我的问题是现在通过 shell 脚本了解目录遍历。
我在上面描述的排序脚本的末尾添加了这个片段
dirlist=$(find $1 -mindepth 1 -maxdepth 1 -type d)
for dir in $dirlist
do
cd $dir
echo $dir
ls
done
Run Code Online (Sandbox Code Playgroud)
当我在 Pano2 文件夹中运行它时,其中包含两个内部文件夹,我总是遇到错误
./dirTravel: line 9: cd: Pano2/05-15-2012-2: No such file or directory
Run Code Online (Sandbox Code Playgroud)
但是,在那之后,我从指定的目录中获取了文件列表。
警告背后的原因是什么?如果我cd ../在ls获得 Pano2/ 中的文件夹列表而不是文件本身之后添加。
基本上我正在使用 find 命令搜索存在于许多目录中的多字文件,并将输出存储到变量 vari 中
vari = `find -name "multi word file.xml"
Run Code Online (Sandbox Code Playgroud)
当我尝试使用 for 循环迭代删除文件时,
for file in ${vari[@]}
Run Code Online (Sandbox Code Playgroud)
执行失败说。
rm: cannot remove `/abc/xyz/multi':: No such file or directory
Run Code Online (Sandbox Code Playgroud)
你们能帮我解决这个场景吗?
嗨,我正在寻找一个目录中正在更改的文件,我想获取每个文件的md5sum并将其写入文本文件.然后,我知道一个文件已经改变,我想再次运行它,所以我可以区分输出文件,看看究竟发生了什么变化.这是我尝试过但它不能正常工作.
此外,我不仅需要获取包含子目录的文件夹中每个文件的md5sum,我还需要它不遵循符号链接
#!/bin/bash
#
cd /sys/class
for i in $(find . -type f)
do
ls -lt "$i" >> /home/george/Desktop/before.txt
done
echo "Finished!"
Run Code Online (Sandbox Code Playgroud)
感谢您的任何帮助
===编辑===
我把我的实际路径放进去,因为我真的不需要隐藏它们.无论如何运行它只返回几个文件(下面输出的文件),这些文件夹中的文件意味着它不会进入子目录并找到这些文件.顺便说一下,我的bash生锈了
--w------- 1 root root 4096 Jun 20 03:03 ./gpio/export
--w------- 1 root root 4096 Jun 20 03:03 ./gpio/unexport
-rw-r--r-- 1 root root 4096 Jun 20 03:03 ./firmware/timeout
-r--r--r-- 1 root root 4096 Jun 20 03:04 ./drm/version
Run Code Online (Sandbox Code Playgroud)
=== EDIT2 ===
不完全确定为什么没有找到某些这样的文件/例如/ sys/class/backlight/intel_backlight/brightness
还有许多其他类似的东西,因为某种原因没有找到这么多文件
如何使用find?在名称中包含空格的目录中搜索文件?我使用脚本
#!/bin/bash
for i in `find "/tmp/1/" -iname "*.txt" | sed 's/[0-9A-Za-z]*\.txt//g'`
do
for j in `ls "$i" | grep sh | sed 's/\.txt//g'`
do
find "/tmp/2/" -iname "$j.sh" -exec cp {} "$i" \;
done
done
Run Code Online (Sandbox Code Playgroud)
但是不处理名称中包含空格的文件和目录?
我在写bash脚本
我的文件如下:
file="${nodeID}_00000_19700101010${ts}_udp_filtered.pcap"。是否可以代替00000使用任何5位数字?我考虑过使用
file="${nodeID}_*_19700101010${ts}_udp_filtered.pcap"
有时我有00001,有时是00004,等等。
我有一个bash脚本,我需要遍历find命令的输出的每一行,但看起来我正在从find命令迭代每个Word(空格分隔).到目前为止我的脚本看起来像这样:
folders=`find -maxdepth 1 -type d`
for $i in $folders
do
echo $i
done
Run Code Online (Sandbox Code Playgroud)
我希望这会给出如下输出:
./dir1 and foo
./dir2 and bar
./dir3 and baz
Run Code Online (Sandbox Code Playgroud)
但我得到这样的输出:
./dir1
and
foo
./dir2
and
bar
./dir3
and
baz
Run Code Online (Sandbox Code Playgroud)
我在这做错了什么?
我有这样一个bash脚本.我想将目录下的gzip所有.ppm文件转到另一个目录.出于这个原因,我写了这样一个bash脚本:
cd /export/students/sait/12-may
for next_file in $(find . -type f ! -name *.ppm )
do
/bin/gzip -f -c $next_file > /export/students/sait/12-may-yedek/$next_file.gz
done
Run Code Online (Sandbox Code Playgroud)
当我执行这个脚本时,我得到这样的错误:
/usr/bin/find: Argument list too long
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?