相关疑难解决方法(0)

使xargs处理包含空格的文件名

$ ls *mp3 | xargs mplayer  

Playing Lemon.  
File not found: 'Lemon'  
Playing Tree.mp3.  
File not found: 'Tree.mp3'  

Exiting... (End of file)  
Run Code Online (Sandbox Code Playgroud)

我的命令失败,因为文件"Lemon Tree.mp3"包含空格,因此xargs认为它是两个文件.我可以使find + xargs使用这样的文件名吗?

shell find xargs

232
推荐指数
8
解决办法
9万
查看次数

将秒数转换为小时,分钟,秒

如何将秒数转换为小时,分钟和秒?

show_time() {
  ?????
}

show_time 36 # 00:00:36
show_time 1036 # 00:17:26
show_time 91925 # 25:32:05
Run Code Online (Sandbox Code Playgroud)

bash

41
推荐指数
11
解决办法
7万
查看次数

并行化代码时 xargs 和 gnu parallel 有何不同?

这是一个基本问题。我很好奇 xargs 和 gnu parallel 在并行化代码时有何不同?

是否存在您会使用其中一种而不是另一种的用例?

我问这个问题是因为我已经看到了并行化问题的答案,其中使用任何一种工具都被社区认为是可以接受的。

unix xargs gnu-parallel

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

bash脚本在后台运行一定数量的作业

我需要一个bash脚本在后台运行一些作业,一次三个作业.

我知道可以通过以下方式做到这一点,为了说明,我假设工作的数量是6:

./j1 &
./j2 &
./j3 &
wait
./j4 &
./j5 &
./j6 &
wait
Run Code Online (Sandbox Code Playgroud)

但是,通过这种方式,例如,如果j2运行j1和j3需要更长的时间,那么,我将只会遇到一个运行很长时间的后台作业.

替代方案(这就是我想要的)是每当一个作业完成时,bash应该开始队列中的下一个作业,以便在任何给定时间保持3个作业的速率.是否可以编写一个bash脚本来实现这个替代方案,可能使用循环?请注意,我需要运行更多的工作,我希望这种替代方法能为我节省大量时间.

这是我的脚本草稿,我希望你可以帮助我验证它的正确性并改进它,因为我是bash脚本的新手.从这里,这里这里获取和修改此脚本中的想法:

for i in $(seq 6)
do
   # wait here if the number of jobs is 3 (or more)
   while (( (( $(jobs -p | wc -l) )) >= 3 )) 
   do 
      sleep 5      # check again after 5 seconds
   done

   jobs -x ./j$i &
done
wait
Run Code Online (Sandbox Code Playgroud)

恕我直言,我认为这个脚本做了所需的行为.但是,我需要知道 - 来自bash专家 - 如果我做错了什么或者是否有更好的方法来实现这个想法.

非常感谢你.

linux bash shell

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

将 16 行合并为一行

文件包含表示十六进制值的 ASCII 字符。(每行以“,”结尾)

cat temp.txt
    0x6A, 
    0xF2, 
    0x44,
    .....
    0xF8, 
    0x1A,
Run Code Online (Sandbox Code Playgroud)

我尝试将每 16 个单词/行组合成这样的一行

cat hex_result.txt 
0x6A, 0xF2, 0x44, 0xF8, 0x45, 0x41, 0x88, 0xD1,0x4E, 0x8B, 0xA3, 0xB1, 0x8C, 0xE0, 0x37, 0x2D, 
.... 
0xE2, 0x1C, 0x06, 0x8A, 0x75, 0x2B, 0xBC, 0x3C, 0xC5, 0x08, 0xB7, 0x4E, 0xB0, 0xE4, 0xF8, 0x1A,
Run Code Online (Sandbox Code Playgroud)

是否有任何 bash 命令来完成它?

bash

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

为什么使用下划线作为 bash 中读取的参数?

我最近发现了一篇关于如何从 GitHub 中的组织克隆所有存储库的帖子。最佳答案如下:

gh repo list myorgname --limit 4000 | while read -r repo _; do
  gh repo clone "$repo" "$repo"
done
Run Code Online (Sandbox Code Playgroud)

我理解下划线之前和之后的所有内容。是什么意思 _; 在上面的命令中?

谢谢!

bash

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

标签 统计

bash ×4

shell ×2

xargs ×2

find ×1

gnu-parallel ×1

linux ×1

unix ×1