후속작
일:
*AlbumArt*
iname 파일을 포함하고 iname 도 포함하는 모든 폴더를 나열하고*cover*.jpg
각 폴더에 대해 크기와 함께 모든 jpg 파일을 나열합니다.find . -type f -iname '*AlbumArt*' -print0 | sort -z \ | xargs -0 -I "{}" bash -c ' find "$(dirname "${1}")" -maxdepth 1 -iname "*cover*.jpg" -print0' _ "{}" \; \ | uniq -z | xargs -0 -I "{}" bash -c ' ls -la "$(dirname "${1}")"/*.jpg;' _ "{}" \;
나는 무엇을 하고 싶은가?
*cover*.jpg
iname 및 iname을 포함하는 모든 폴더를 나열 *AlbumArt*
하고 해당 폴더에 있는 각 이미지 파일의 크기를 나열하고 노틸러스를 열어 해당 폴더에서 이러한 이미지를 수동으로 확인할 수 있도록 하고 싶습니다(일부 추가 파일을 제거하고 싶기 때문에). 한 번에 하나의 폴더를 처리합니다. 따라서 xargs의 모든 출력에 대해 ls -la
노틸러스를 켜고 노틸러스가 닫힐 때까지 기다리고 싶기 때문에 nautilus "${1}"; read -r -p "Press any key to continue" Continue;
위에 추가했습니다.
find . -type f -iname '*AlbumArt*' -print0 | sort -z \
| xargs -0 -I "{}" bash -c '
find "$(dirname "${1}")" -maxdepth 1 -iname "*cover*.jpg" -print0' _ "{}" \; \
| uniq -z | xargs -0 -I "{}" bash -c '
ls -la "$(dirname "${1}")"/*.jpg; nautilus "${1}"; read -r -p "Press any key to continue" Continue;' _ "{}" \;
이것은 작동하지만 사용자 입력을 위해 멈추지 않습니다. 즉, read -r -p "Press any key to continue" Continue;
여러 노틸러스 창이 열립니다! 하지만 한 번에 하나의 노틸러스만 열고 싶기 때문에 xargs가 각 행 실행 후에 기다리기를 원합니다.
xargs가 각 행을 실행한 후 사용자 입력을 기다리게 하려면 어떻게 해야 합니까?
답변1
명령은 read
호출 쉘에 있으므로 xargs
표준 입력은 /dev/null
(대부분의 xargs 구현의 경우) 또는 읽은 파이프입니다 xargs
. 터미널에서 읽으려면 표준 입력을 리디렉션하세요 read … </dev/tty
.
아직 귀하의 코드를 검토하지 않았습니다. 복잡해 보입니다. 모든 디렉토리를 반복하는 것이 더 간단할 것이며 아마도 눈에 띄게 느리지는 않을 것입니다.
shopt -s globstar nullglob nocaseglob
# Caveat: this matches symbolic links to directories. And in
# versions of bash prior to 5.0 traverses (some of) those symlinks.
for d in **/*/; do
a=( "$d"/*albumart* )
c=( "$d"/*cover*.jpg )
if (( ${#a[@]} > 0 && ${#c[@]} > 0} )); then
ls -ld -- "$d"/*.jpg
nautilus -- "${c[@]}"
read -r -p "Press <Return> to continue" Continue
fi
done