find, sed, awk, cut 또는 기타 명령을 사용하여 파일 이름 목록만 가져오고 디렉터리와 하위 디렉터리를 삭제하는 방법.
예: 모든 미디어 파일 목록을 얻기 위해 find를 사용합니다.
find /var/warehouse/* -type f \( -name "*.avi" -o -name "*.mkv" -o -name "*.flv" -o -name "*.mp4" \) -exec ls {} +
산출:
/var/warehouse/movies/Blade/The.Bucket.List[2007]DvDrip-aXXo.avi
/var/warehouse/movies/Blade/The Lion King (1994).mkv
/var/warehouse/movies/Blade/The.Pursuit.of.Happyness.2006.DVD5.720p.BluRay.x264-REVEiLLE.en.mkv
/var/warehouse/movies/Blade/The Secret [Dual Audio] Upscaled 720p Ripped by FÅM€.mkv
/var/warehouse/movies/Blade/Yes.Man.2008.DvDRip-FxM.avi
/var/warehouse/movies/Bollywood/Bhaag Milkha Bhaag - DVDScr - XviD - 1CDRip - [DDR].avi
내가 원하는 출력은 다음과 같습니다.
The.Bucket.List[2007]DvDrip-aXXo.avi
The Lion King (1994).mkv
The.Pursuit.of.Happyness.2006.DVD5.720p.BluRay.x264-REVEiLLE.en.mkv
The Secret [Dual Audio] Upscaled 720p Ripped by FÅM€.mkv
Yes.Man.2008.DvDRip-FxM.avi
Bhaag Milkha Bhaag - DVDScr - XviD - 1CDRip - [DDR].avi
답변1
당신은 이미 그것들을 대부분 가지고 있습니다. 당신은 당신의 것을 다음으로 -exec
변경 하면됩니다.-printf
find /var/warehouse/* -type f \( -name "*.avi" -o -name "*.mkv" -o -name "*.flv" -o -name "*.mp4" \) -printf "%f\n"
%f
경로를 무시하고 찾은 파일의 이름을 인쇄합니다.
및 와 같은 파일 도 일치하도록 을 (대소문자 구분 일치) -name
로 변경하는 것을 고려할 수도 있습니다 .-iname
*.Avi
*.AVI
답변2
POSIX적으로:
find /var/warehouse/* -type f \( -name "*.avi" -o -name "*.mkv" \
-o -name "*.flv" \
-o -name "*.mp4" \) \
-exec basename {} \;
또는 다음 find
을 결합 할 수 있습니다 sed
.
find /var/warehouse/* -type f \( -name "*.avi" -o -name "*.mkv" \
-o -name "*.flv" \
-o -name "*.mp4" \) | sed -e 's!.*/!!'