嘿,我有一个问题。
这是我正在使用的命令(在 的地方echo $file
是一个不同的命令。我简化了它):
find /home/cas/plex-media/series/ -type f -name "*" ! -name "*.srt" -print0 | sort | xargs -0 -n1 -I{} file={} && echo $file
它说这file={}
不是命令,这是真的,因为它是一个变量。我每次都需要将该变量设置为输出的一行,就像 xargs 对命令所做的那样。但是我需要它来填充变量,然后为排序输出的每一行使用该变量运行该命令。
例子:
作为输入(又名排序输出):
/home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E01 - Pokémon - I Choose You!.mp4
/home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E02 - Pokémon Emergency.mp4
/home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E03 - Ash Catches a Pokémon.mp4
我希望 xargs 每次都如何执行它:
file=/home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E01 - Pokémon - I Choose You!.mp4 && echo /home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E01 - Pokémon - I Choose You!.mp4
file=/home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E02 - Pokémon Emergency.mp4 && echo /home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E02 - Pokémon Emergency.mp4
file=/home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E03 - Ash Catches a Pokémon.mp4 && echo /home/cas/plex-media/series/Pokémon/Season 1/Pokémon - S01E03 - Ash Catches a Pokémon.mp4
我不能这样做echo {}
,因为我有多个地方是我{}
需要填写的命令,而且我有很多command {} $(other command {})
. 所以我用变量替换了所有需要排序输出的地方$file
。因为那时 xargs 只需要更改一次变量并运行命令。然后更改变量并再次运行命令等。
我希望您了解我的问题以及我的目标是什么。你能帮助我吗?
谢谢!
xargs
与sh -c
(或bash -c
如果需要)一起使用:如果您不需要该
sort
步骤,最好避免xargs
并使用find -exec
:为什么我们需要这种奇怪的符号
sh -c '...' sh {}
,请参阅是否可以find -exec sh -c
安全使用?