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