相关疑难解决方法(0)

如何在Linux中循环目录?

我在Linux上用bash编写脚本,需要遍历给定目录中的所有子目录名称.如何遍历这些目录(并跳过常规文件)?

例如:
给定目录是否/tmp/
具有以下子目录:/tmp/A, /tmp/B, /tmp/C

我想要检索A,B,C.

linux bash

147
推荐指数
8
解决办法
20万
查看次数

何时在shell变量周围包装引号?

有人能告诉我是否应该在shell脚本中包含变量的引号?

例如,以下是正确的:

xdg-open $URL 
[ $? -eq 2 ]
Run Code Online (Sandbox Code Playgroud)

要么

xdg-open "$URL"
[ "$?" -eq "2" ]
Run Code Online (Sandbox Code Playgroud)

如果是这样,为什么?

unix linux bash shell quotes

145
推荐指数
4
解决办法
5万
查看次数

Shellscript循环文件夹中的所有文件

我想写一个shellcript,它将循环遍历文件夹中的所有文件并回显"put $ {filename}".谁能指出我正确的方向?

bash shell loops

23
推荐指数
3
解决办法
6万
查看次数

查找,grep和执行 - 一体化?

这是我用来在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要这样做 - 我不太了解差异,但我知道有一些重要的.

谢谢大家的回复,我将在命令行尝试其中的一些,看看我是否能让他们中的任何一个工作,然后我想我可以选择最好的答案.如果您希望我澄清任何其他内容,请发表评论.

再次感谢!

shell grep find

18
推荐指数
2
解决办法
3万
查看次数

Bash脚本,循环文件夹中的文件失败

我正在使用此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)

如果文件夹中没有任何文件?

bash

15
推荐指数
2
解决办法
1万
查看次数

在循环中执行ffmpeg命令

我有我的文件夹中的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)

bash ffmpeg

12
推荐指数
3
解决办法
1万
查看次数

遍历目录的shell脚本

我正在做一个需要批量处理大量图像文件的项目。为了使事情更容易,我编写了一个脚本,该脚本将根据用户输入创建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/ 中的文件夹列表而不是文件本身之后添加。

bash

4
推荐指数
2
解决办法
2万
查看次数

将嵌入空格的文件名读取到 shell 脚本中的数组中

基本上我正在使用 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)

你们能帮我解决这个场景吗?

arrays shell whitespace

4
推荐指数
1
解决办法
2223
查看次数

Bash获取文件夹中所有文件的md5sum

嗨,我正在寻找一个目录中正在更改的文件,我想获取每个文件的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

还有许多其他类似的东西,因为某种原因没有找到这么多文件

bash md5sum

3
推荐指数
1
解决办法
9723
查看次数

如何使用“查找”在名称中包含空格的目录中搜索文件?

如何使用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)

但是不处理名称中包含空格的文件和目录?

linux bash shell sed find

3
推荐指数
1
解决办法
4708
查看次数

如何在字符串中间使用通配符?重击

我在写bash脚本

我的文件如下: file="${nodeID}_00000_19700101010${ts}_udp_filtered.pcap"。是否可以代替00000使用任何5位数字?我考虑过使用

file="${nodeID}_*_19700101010${ts}_udp_filtered.pcap"

有时我有00001,有时是00004,等等。

bash filenames

2
推荐指数
1
解决办法
5214
查看次数

Bash脚本 - 迭代find的输出

我有一个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)

我在这做错了什么?

linux bash shell scripting

1
推荐指数
2
解决办法
6477
查看次数

/ usr/bin/find:for循环bash脚本中的参数列表太长

我有这样一个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)

我该如何解决这个问题?

linux bash glob find quoting

1
推荐指数
1
解决办法
1655
查看次数

标签 统计

bash ×11

shell ×6

linux ×5

find ×3

arrays ×1

ffmpeg ×1

filenames ×1

glob ×1

grep ×1

loops ×1

md5sum ×1

quotes ×1

quoting ×1

scripting ×1

sed ×1

unix ×1

whitespace ×1