linux如何选多个文件,linux – 从各种目录中随机选择一个文件并进行排序

我有很多文本文件分布在几个目录中.我想对所有文件进行排序并创建一个文件名列表(在文本文件中),但是以一种特殊的定义顺序.我最初的想法是从这些目录中随机选择第一个文件* 1.txt.然后重复该过程(* 2.txt,* 3.txt等),直到所有文件名都在列表中.我怎样才能在bash中实现这一目标?

基础:

从1个目录中随机选择文件:

shuf -n1 –e *

从1目录中选择第一个文件:

ls | sort -n | head -1

例:

更新:文件结构/真实文件名格式(这只是几个文件,有几百个)

初始订单:

media/sf_linux_sandbox/papers/

|-- semester_1

| |-- cs630-linux_research_paper-fname_lname-001.txt

| |-- cs635-progamming_languages-fname_lname-002.txt

| |-- cs645-java_programming_paper-fname_lname-003.txt

| `-- cs900-computer_robotics_capstone-fname_lname-004.txt

|-- semester_2

| |-- cs650-software_methodologies-fname_lname-001.txt

| |-- cs675-nosql_db_research-fname_lname-002.txt

| |-- cs700-artificial_intelligence_reasearch-fname_lname-003.txt

| |-- cs800-algorithms_and_computational_complexity-fname_lname-004.txt

| |-- cs825-database_systems_internals-fname_lname-005.txt

| `-- cs850-computer_graphics-fname_lname-006.txt

|-- semester_3

|-- cs725-web_programming_technologies-fname_lname-001.txt

|-- cs750-data_programming-fname_lname-002.txt

`-- cs775-hardware_software_interface_paper-fname_lname-003.txt

我想要生成的输出/结果(随机调整文件,但保持数字顺序):

results.txt

/filepath/cs650-software_methodologies-fname_lname-001.txt

/filepath/s630-linux_research_paper-fname_lname-001.txt

/filepath/cs725-web_programming_technologies-fname_lname-001.txt

/filepath/cs635-progamming_languages-fname_lname-002.txt

/filepath/cs750-data_programming-fname_lname-002.txt

/filepath/cs675-nosql_db_research-fname_lname-002.txt

/filepath/cs645-java_programming_paper-fname_lname-003.txt

/filepath/cs775-hardware_software_interface_paper-fname_lname-003.txt

/filepath/cs700-artificial_intelligence_reasearch-fname_lname-003.txt

/filepath/cs900-computer_robotics_capstone-fname_lname-004.txt

/filepath/cs800-algorithms_and_computational_complexity-fname_lname-004.txt

/filepath/cs825-database_systems_internals-fname_lname-005.txt

/filepath/cs850-computer_graphics-fname_lname-006.txt

解决方法:

这会对源树中的所有文件进行洗牌,对数字部分进行部分排序,并使用稳定的排序,因此其他元素仍然是混洗的.

$target=~/tmp/shuf

$destination=/filepath/

$tree $target

~/tmp/shuf

`-- papers

|-- semester_1

| |-- cs630-linux_research_paper-fname_lname-001.txt

| |-- cs635-progamming_languages-fname_lname-002.txt

| |-- cs645-java_programming_paper-fname_lname-003.txt

| `-- cs900-computer_robotics_capstone-fname_lname-004.txt

|-- semester_2

| |-- cs650-software_methodologies-fname_lname-001.txt

| |-- cs675-nosql_db_research-fname_lname-002.txt

| |-- cs700-artificial_intelligence_reasearch-fname_lname-003.txt

| |-- cs800-algorithms_and_computational_complexity-fname_lname-004.txt

| |-- cs825-database_systems_internals-fname_lname-005.txt

| `-- cs850-computer_graphics-fname_lname-006.txt

`-- semester_3

|-- cs725-web_programming_technologies-fname_lname-001.txt

|-- cs750-data_programming-fname_lname-002.txt

`-- cs775-hardware_software_interface_paper-fname_lname-003.txt

4 directories, 13 files

$find $target -type f -iname "*.txt" | shuf | awk -F- '{printf("%s:%s\n", $0, $NF)}' | sort -t : -k 2 -s | cut -d : -f 1 | xargs -n1 basename | sed "s,^,$destination,"

/filepath/cs725-web_programming_technologies-fname_lname-001.txt

/filepath/cs650-software_methodologies-fname_lname-001.txt

/filepath/cs630-linux_research_paper-fname_lname-001.txt

/filepath/cs635-progamming_languages-fname_lname-002.txt

/filepath/cs750-data_programming-fname_lname-002.txt

/filepath/cs675-nosql_db_research-fname_lname-002.txt

/filepath/cs775-hardware_software_interface_paper-fname_lname-003.txt

/filepath/cs700-artificial_intelligence_reasearch-fname_lname-003.txt

/filepath/cs645-java_programming_paper-fname_lname-003.txt

/filepath/cs900-computer_robotics_capstone-fname_lname-004.txt

/filepath/cs800-algorithms_and_computational_complexity-fname_lname-004.txt

/filepath/cs825-database_systems_internals-fname_lname-005.txt

/filepath/cs850-computer_graphics-fname_lname-006.txt

要将结果存储在名为filename的文件中,您可以重定向:

$find $target -type f -iname "*.txt" | shuf | awk -F- '{printf("%s:%s\n", $0, $NF)}' | sort -t : -k 2 -s | cut -d : -f 1 | xargs -n1 basename | sed "s,^,$destination," > filename

来源:https://www.icode9.com/content-3-407251.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值