如何使用 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
to更改为-iname
(不区分大小写的匹配),以便它也匹配*.Avi
和*.AVI
等文件。
答案2
POSIXly:
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!.*/!!'