假设我有一个 for in 循环:
for i in /apps/textfiles/*.txt
do
do something
done
Run Code Online (Sandbox Code Playgroud)
现在说我在/apps/textfiles/ 中有 50 个文件
将按什么顺序选取文件?
这是在后台启动多个顺序处理的正确方法吗?
for i in {1..10}; do
for j in {1..10}; do
run_command $i $j;
done &
done;
Run Code Online (Sandbox Code Playgroud)
所有j后应相互给予处理i,但都i应该被同时处理。
我有一个想法,即运行 bash 脚本来检查某些条件并使用ffmpeg将我目录中的所有视频从任何格式转换为.mkv它,它运行良好!
问题是,我不知道for file in循环不能递归地工作(/sf/ask/324721211/)
但我几乎不理解“管道”,我期待看到一个例子并清除一些不确定性。
我想到了这个场景,我认为这对我的理解有很大帮助。
假设我有这个 bash 脚本片段:
for file in *.mkv *avi *mp4 *flv *ogg *mov; do
target="${file%.*}.mkv"
ffmpeg -i "$file" "$target" && rm -rf "$file"
done
Run Code Online (Sandbox Code Playgroud)
它的作用是,对于当前目录,搜索任何*.mkv *avi *mp4 *flv *ogg *mov然后声明输出具有其扩展名,.mkv然后删除原始文件,然后输出应保存到原始视频所在的同一文件夹中。
如何将其转换为递归运行?如果我使用find,在哪里声明变量$file?你应该在哪里申报$target?都是find真的单行吗?我真的需要将文件传递给一个变量$file,因为我仍然需要运行条件检查。
并且,假设(1)成功,如何确保满足“然后输出应保存到原始视频所在的同一文件夹”的要求?
我很难通过这段man bash话。
If the control variable in a for loop has the
nameref attribute, the list of words can be a list of shell variables,
and a name reference will be established for each word in the list, in
turn, when the loop is executed. Array variables cannot be given the
-n attribute. However, nameref variables can reference array variables
and subscripted array variables.
Run Code Online (Sandbox Code Playgroud)
你能给出一个循环中这个 nameref 变量的例子并解释一下吗?
我有下面的代码来替换多个文件中的一些字符串,但是 for 循环正在检查第一个文件而不是执行 perl 脚本。下面是我的代码
if [ -f zebu.work.post_opt/ZEBU_CTO_FT_MOD.v ]
then
for file in $(./zebu.work.post_opt/ZEBU_CTO_FT_MOD*);
do
perl -i -p -e 's/input/inout/g' $file;
perl -i -p -e 's/output/inout/g' $file;
perl -i -p -e 's/wire.*\n/tran\(i0,\ o\);/g' $file;
perl -i -p -e 's/assign.*\n//g' $file;
done
fi
Run Code Online (Sandbox Code Playgroud) 我有一个类似这样的脚本:
for chain in http https ssh
do
iptables -nvxL $chain | tail -1 | awk '{print $2}'
done
Run Code Online (Sandbox Code Playgroud)
但我实际上想做的是将iptables每次迭代的命令输出捕获到不同的变量中,其名称应该等于 的当前值chain。
因此,对于第一次循环迭代(其中$chain是http),我希望发生这种情况:
http=$(iptables -nvxL http | tail -1 | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)
然后接下来我想要这个:
https=$(iptables -nvxL https | tail -1 | awk '{print $2}')
Run Code Online (Sandbox Code Playgroud)
希望您明白这个想法,但不知道如何做到这一点。
如何更改for track in *.mp3; do以便.mp3以随机方式遍历当前目录中的所有文件?
Unix 中的一个简单 for 循环是:
for FILE in $BASE_WORK_DIR/*.pdf
do
echo $FILE
done
Run Code Online (Sandbox Code Playgroud)
这将回.pdf显 BASE_WORK_DIR 目录中的所有文件。
如果还BASE_WORK_DIR包含子目录,其中也包含 pdf 文件怎么办。
在这种情况下,我如何设计我的 for 循环来获取所有 pdf 文件BASE_WORK_DIR以及子目录BASE_WORK_DIR?
我正在处理一种情况,我需要从数组中创建一个逗号分隔的列表到一个 heredoc 并删除最后一个逗号。我正在使用 bashfor管道sed,它正在擦除所有逗号而不是最后一个。一个简化的例子如下:
x=$(for i in a b c; do echo "${i}",; done| sed 's/,$//')
echo $x
a b c
Run Code Online (Sandbox Code Playgroud)
期望的输出:
a, b, c
Run Code Online (Sandbox Code Playgroud)
任何建议表示赞赏。
我有一个像这样有很多行的文件
/item/pubDate=2014 年 2 月 23 日星期日 00:55:04 +010
如果我执行这个
echo "/item/pubDate=Sun, 23 Feb 2014 00:55:04 +010" | grep -Po "(?<=\=).*"
Sun, 23 Feb 2014 00:55:04 +010
Run Code Online (Sandbox Code Playgroud)
我得到了正确的日期(全部在一行中)。现在我想用 xml 文件中的很多日期来尝试这个。我用这个,没问题。
xml2 < date_list | egrep "pubDate" | grep -Po "(?<=\=).*"
Fri, 22 Jan 2016 17:56:29 +0100
Sun, 13 Dec 2015 18:33:02 +0100
Wed, 18 Nov 2015 15:27:43 +0100
...
Run Code Online (Sandbox Code Playgroud)
但现在我想在 bash 程序中使用日期,我得到了这个输出
for fecha in $(xml2 < podcast | egrep "pubDate" | grep -Po "(?<=\=).*"); do echo $fecha; done
Fri, …Run Code Online (Sandbox Code Playgroud)